watermerk + header(location) werk niet
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
$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
al deze aanpassingen en het watermerk, gebeurt dat met de tijdelijke bestanden van de afbeelding?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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\">";
?>
$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\">";
?>
of komt er helemaal niks uit?
zet. Als ik hier niet die header onder zet krijg ik gewoon de afbeelding mét het watermerk zoals de bedoeling is.
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?
uit het eerste deel van de manual,
zie ik staan dat header() voor alles met een output gezet moet worden...
misschien is dat het?
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
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?
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 ;-)
ik heb eens iemand geholpen :D
en niet eens om zeep :D:D
lol.
Quote:
:o omg.
ik heb eens iemand geholpen :D
en niet eens om zeep :D:D
lol.
:o
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)
1
2
3
4
5
6
7
8
9
10
11
12
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
?>
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?
Marlies Maalderink schreef op 29.10.2009 12:09:
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
Maar als ik daar niet een header mag gebruiken, hoe krijg ik de gebruiker dan terug op screenshots.php?
Quote:
:o omg.
ik heb eens iemand geholpen :D
en niet eens om zeep :D:D
lol.
:o
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)
1
2
3
4
5
6
7
8
9
10
11
12
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
?>
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
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.
staat die helemaal bovenin je pagina?
als ik de manual goed heb begrepen moet die
gezet worden.
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...
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
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
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.
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...
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.