watermerk + header(location) werk niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Marlies Maalderink

Marlies Maalderink

29/10/2009 11:41:00
Quote Anchor link
Voor een site wil ik afbeeldingen uploaden, die bijschalen in verschillende afmetingen, en dan watermerken. Voor het watermerken gebruik ik een script wat ik van internet heb gevist en iets heb aangepast:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$imagesource = $_GET['path'];
$image = imagecreatefromjpeg($imagesource);  
$watermarksource = $_GET['wmpath'];
$watermark = imagecreatefrompng($watermarksource);
$imagewidth = imagesx($image);
$imageheight = imagesy($image);  
$watermarkwidth =  imagesx($watermark);
$watermarkheight =  imagesy($watermark);
$startwidth = ($imagewidth - $watermarkwidth);
$startheight = ($imageheight - $watermarkheight);
imagecopy($image, $watermark,  $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
imagejpeg($image, $imagesource);
imagedestroy($image);
imagedestroy($watermark);


Op zich werkt dit script prima. Als ik het direct in de browser aanroep met url variabelen is er geen probleem. Als ik het aanroep vanaf een andere pagina via include of <img> tags ook niet. Alles loopt keurig zoals de bedoeling is. Maar als ik dan onderaan de aanroepende pagina een header(location) tag zet is het over en uit, de afbeeldingen worden niet meer ge-watermerkt.

Dit is de paginastructuur:
screenshots.php -> hier staat het upload formulier
screenshots2.php -> deze schaalt de afbeelding en slaat hem op. Onderaan de pagina staat de header die hem weer terugwijst naar screenshots.php
watermark.php -> wordt aangeroepen door screenshots2.php via <img> of include tag (beide schijnen te werken alhoewel ik niet weet welke van de twee gebruikelijk is voor dit verhaal)

Weet iemand wat er aan de hand is?

Op zich is dit op te lossen door op de aanroepende pagina een terug-linkje te plaatsen, maar dit lijkt niet netjes, en er moet toch een manier zijn om het voor elkaar te krijgen...
Gewijzigd op 01/01/1970 01:00:00 door Marlies Maalderink
 
PHP hulp

PHP hulp

26/04/2024 14:30:26
 
Koen

koen

29/10/2009 11:44:00
Quote Anchor link
al deze aanpassingen en het watermerk, gebeurt dat met de tijdelijke bestanden van de afbeelding?
 
Marlies Maalderink

Marlies Maalderink

29/10/2009 11:45:00
Quote Anchor link
Het schalen en opslaan wel, het watermerken niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$widthTn
= "155";
$heightTn = "110";
$locationtn = "../screenshots/" . $title . "_tn.jpg";
$watermarktn = "watermark_tn.png";

     $image = new SimpleImage();
     $image->load($_FILES['image']['tmp_name']);
     $image->resize($widthTn,$heightTn);
     $image->save($locationtn);

echo "<img src=\"watermark.php?path=$locationtn&wmpath=$watermarktn\">";
?>
 
Koen

koen

29/10/2009 11:46:00
Quote Anchor link
en hier uit komt alleen de afbeelding? of alleen het watermerk?
of komt er helemaal niks uit?
 
Marlies Maalderink

Marlies Maalderink

29/10/2009 11:48:00
Quote Anchor link
Alleen de afbeelding als ik onder

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo "<img src=\"watermark.php?path=$locationtn&wmpath=$watermarktn\">"; ?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php header('Location: screenshots.php'); ?>


zet. Als ik hier niet die header onder zet krijg ik gewoon de afbeelding mét het watermerk zoals de bedoeling is.
 
Koen

koen

29/10/2009 11:49:00
Quote Anchor link
http://nl.php.net/manual/en/function.header.php
uit het eerste deel van de manual,
zie ik staan dat header() voor alles met een output gezet moet worden...
misschien is dat het?
 
Michael -

Michael -

29/10/2009 11:53:00
Quote Anchor link
Wanneer je een headers cannot be sent error krijgt, betekent dit dat je een session_start(), setcookie(), header() of een andere functie die een header naar je browser verstuurt op de verkeerde plaats hebt staan. Deze functies moeten aangeroepen worden, voordat er iets is verstuurd naar de browser. Het komt er concreet op neer dat je geen enkele tekst mag hebben voordat je deze functie aanroept. Een connectie naar een database maken mag wel, je mag ook variabelen benoemen maar je mag geen 'echo' gebruiken en geen html. Ook kun je geen dubbele headers gebruiken (bijv. session_start() en daarna headers()).

Wanneer je de error krijgt en werkelijk niets voor de functie hebt staan, dan kan dit liggen aan de encoding van je bestand. Copy/paste je code in kladblok (notepad), sla het bestand op en upload het. Wat je ook kan doen is in je texteditor bij encoding (conversion in ultraedit waar dit zich wel eens voordoet) UTF-8 to ASCI te kiezen. Hiermee los je het probleem ook op.
Bron: http://www.phphulp.nl/php/faq/#2
 

29/10/2009 12:02:00
Quote Anchor link
koen schreef op 29.10.2009 11:49:
http://nl.php.net/manual/en/function.header.php
uit het eerste deel van de manual,
zie ik staan dat header() voor alles met een output gezet moet worden...
misschien is dat het?


Dat is het inderdaad. Die header(); moet helemaal bovenaan staan ;-)
 
Koen

koen

29/10/2009 12:04:00
Quote Anchor link
:o omg.
ik heb eens iemand geholpen :D
en niet eens om zeep :D:D
lol.
 
Marlies Maalderink

Marlies Maalderink

29/10/2009 12:09:00
Quote Anchor link
Quote:
:o omg.
ik heb eens iemand geholpen :D
en niet eens om zeep :D:D
lol.
:o


LOL... maar ik ben er nog niet... ;)

Ok, bedankt voor jullie uitleg. Maar als ik die header bovenaan zet werkt het hele script niet meer...

In het kort ziet het script er zo uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
ob_start(); //om ervoor te zorgen dat de headers werken op de verkeerde plaats
session_start();

$action = $_GET['action'];

if($action == "add"){
het script wat de afbeelding 4x schaal en opslaat: n thumbnail en drie groten voor verschillende resoluties.
Hier wordt ook via de <img> tag het watermerk script aangeroepen

en hierna moet de gebruiker weer doorgestuurd worden naar screenshots.php - vandaar de header die verschrikkelijk verkeerd geplaatst is
?>


Maar als ik daar niet een header mag gebruiken, hoe krijg ik de gebruiker dan terug op screenshots.php?
 
Koen

koen

29/10/2009 12:10:00
Quote Anchor link
Marlies Maalderink schreef op 29.10.2009 12:09:
Quote:
:o omg.
ik heb eens iemand geholpen :D
en niet eens om zeep :D:D
lol.
:o


LOL... maar ik ben er nog niet... ;)

Ok, bedankt voor jullie uitleg. Maar als ik die header bovenaan zet werkt het hele script niet meer...

In het kort ziet het script er zo uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
ob_start(); //om ervoor te zorgen dat de headers werken op de verkeerde plaats
session_start();

$action = $_GET['action'];

if($action == "add"){
het script wat de afbeelding 4x schaal en opslaat: n thumbnail en drie groten voor verschillende resoluties.
Hier wordt ook via de <img> tag het watermerk script aangeroepen

en hierna moet de gebruiker weer doorgestuurd worden naar screenshots.php - vandaar de header die verschrikkelijk verkeerd geplaatst is
?>


Maar als ik daar niet een header mag gebruiken, hoe krijg ik de gebruiker dan terug op screenshots.php?

ik zie in je code helemaal nergens een header() staan.
alleen in de tekst aan t eind ergens, maar dat klopt denk ik niet helemaal :P
 
Marlies Maalderink

Marlies Maalderink

29/10/2009 12:12:00
Quote Anchor link
Onder regel 7 is het geen php meer, want dan zou ik daar een script van 60 regels moeten plakken. Het is dus een samenvatting, met als doel aan te geven wáár de header staat in het script, en waarom ik hem niet eerder kan plaatsen.
 
Koen

koen

29/10/2009 12:15:00
Quote Anchor link
waar staat je phpcode?
staat die helemaal bovenin je pagina?
als ik de manual goed heb begrepen moet die
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
header();
//....(plaats de rest hier)
?>


gezet worden.
 
Marlies Maalderink

Marlies Maalderink

29/10/2009 12:25:00
Quote Anchor link
nogmaals:

Onder regel 7 is het geen php meer, want dan zou ik daar een script van 60 regels moeten plakken. Het is dus een samenvatting, met als doel aan te geven wáár de header staat in het script, en waarom ik hem niet eerder kan plaatsen.

Ik wéét dat die header bovenaan moet staan, maar dat gaat niet, want dan werkt het hele script niet meer. Dat is het probleem...
 
Koen

koen

29/10/2009 12:26:00
Quote Anchor link
staat er niks in de manual wat je helpt?
http://nl.php.net/manual/en/function.header.php
Gewijzigd op 01/01/1970 01:00:00 door koen
 
Marlies Maalderink

Marlies Maalderink

29/10/2009 12:33:00
Quote Anchor link
Nee.

Maar goed, om even het probleem samen te vatten:

Zodra ik onderaan mijn script een header zet om de gebruiker terug te sturen naar de volgende pagina wordt het watermerk niet meer op de afbeeldingen toegepast. De afbeeldingen worden wel opgeslagen en de titels worden in de database gezet - zover geen probleem - alleen het watermerk wordt niet geplaatst.

Als ik de header weghaal worden de watermerken wel geplaatst, maar dan blijft de bezoeker steken op de witte uitvoer-pagina ipv netjes teruggestuurd naar de pagina waar hij of zij vandaan kwam.

LET OP: ik wéét dat die header daar verkeerd staat, maar anders werkt het script zoiezo niet, vandaar ob_start

Dus: heeft iemand ervaring met watermerken en weet die wat er mis kan zijn?
Gewijzigd op 01/01/1970 01:00:00 door Marlies Maalderink
 
Koen

koen

29/10/2009 12:36:00
Quote Anchor link
en als je je header
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
header("/screenshots.php");
?>

maakt?

(ben nu aan t meedenken)
 
Marlies Maalderink

Marlies Maalderink

29/10/2009 12:45:00
Quote Anchor link
dank je wel voor het meedenken... Ik heb het anders geprobeerd - de php header vervangen door een javasript window.location. Nu werkt het watermerk script wel én word de gebruiker toch weer teruggestuurd naar screenshots.php
 

29/10/2009 12:51:00
Quote Anchor link
de ob_* functie's moet je niet gebruiken. Is alleen maar ergens een pleister of een plakbandje op plakken. Niet de oplossing.
Header zonder iets aanroepen heeft geen zin. Doet niks.
Je zult vast en zeker in watermerk.php het content type http header moeten instellen met header.
Let wel op dat resize scriptje kan alleen jpg bestanden resizen.
 
Marlies Maalderink

Marlies Maalderink

29/10/2009 12:58:00
Quote Anchor link
Dank je wel voor je reactie. Ik weet dat die ob_ functies een plakbandje zijn - haha, maar tot nu toe gebruikte ik ze om bezoekers door te kunnen sturen van pagina naar pagina, op welk punt in het script ik dat dan maar wilde, zonder 'header allready send by" meldingen te krijgen.

Nooit bij still gestaan dat javascript die problemen kon oplossen... kan ik niet alleen die header(location)s verwijderen, maar ook de ob_ functies. :)

Quote:
Let wel op dat resize scriptje kan alleen jpg bestanden resizen.

Klopt, dat is omdat ik alleen jpg's wil toestaan. Het upload/save script geeft een foutmelding als er iets anders dan jpg wordt geupload, dus het watermerk script hoeft alleen maar jpg afbeeldingen te gebruiken...
 

29/10/2009 13:04:00
Quote Anchor link
Nee, javascript is ook niet de oplossing, het kan uitstaan of het kan conflicten hebben. Google kan bijvoorbeeld ook niet omgaan met javascript, als je window.location voor al je redirects gebruikt vind google dat niet leuk.
Als je een redirect wilt moet je gewoon header gebruiken en zoals aangegeven staat in de docs:
header('Location: http://www.example.com/');
Het liefst een volledige url.
Eventueel kan je ook nog http header toevoegen die aangeven of de pagina voor altijd verhuisd is of dat het tijdelijk is.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.