Hallo

Ik heb een script die een tweet op een afbeelding zet. Als ik hem lokaal opsla werkt hij perfect, zodra ik het vraag om hem te outputten, loopt het mis.

Dit is mijn error:

<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/stefagm12/domains/seaslug.nl/public_html/api/api.php:1) in <b>/home/stefagm12/domains/seaslug.nl/public_html/api/api.php</b> on line <b>3</b><br />
����JFIF��>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
��C 

 $.'�`=����l��˫MB;��^�ꘊnrT��p
enzo verder

Api.php:
<?php
str_replace("<br />", "");
error_reporting(E_ALL);
ini_set('display_errors', '1');

if(isset($_GET['naam'])){
header( 'Content-type: image/jpeg' );
$naam = $_GET['naam'];

include_once('test.php');
$twitter = new getTweet;
$get = $twitter->ask("http://rody.vdpol.net/twitter/tweets_json.php?screen_name=" . $naam . "&count=1&include_entities=1&include_rts=1");

foreach($get as $tweet)
{
$test1 = "Auteur: " . $naam ."";
$test3 = "Tweet: " . $tweet['text'] . "";
}

$fotonaam = "twit.jpg";
$fotonaamnew = "" . $naam . ".jpg";
$im = imagecreatefromjpeg($fotonaam);

$stamp = imagecreatetruecolor(300, 130);
$im = imagecreatefromjpeg($fotonaam);
imagestring($stamp, 9, 20, 20, $test1, 0xFFFFFF);
imagestring($stamp, 3, 20, 40, $test3, 0xFFFFFF);

$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);

imagejpeg($im);
imagedestroy($im);
}
else
{
echo "Er is geen gebruikersnaam ingevuld!";
}
?>


Test.php:
<?php
class getTweet
{
function ask($url)
{
$info = file_get_contents($url);
$string = json_decode($info, 1);
return $string;
}
}
?>
Zonder code kunnen we niet veel :)
Maar je hebt in ieder geval tekst voor een header staan. Dit komt ook wel is voor omdat je het verkeerd opslaat. Sla je bestanden op als 'UTF 8 without BOM'
Huh, ik had een code toegevoegd.. Even updaten

//EDIT: Geupdate!
hmmmm,

Je bent een script aan het maken dat binaire data genereert in het jpg formaat. Het heeft dan geen enkele zin om fouten op het scherm weer te geven. Dat zou enkel leiden tot een ongeldige JPG indeling.

Als alternatief zou je fouten kunnen wegschrijven naar een logfile als je er helemaal niet uitkomt.
Of je schakelt tijdens het debuggen regel 7 en 36 uit, er wordt dan geen image meer uitgespuugd en je kunt dan weer tekst uitspugen. Maar het is of tekst of binaire data.

regel 1 tm 3 kunnen van mij dus weg of zet error_reporting juist bewust op 0.

ook de echo op regel 41 kan weg.

Of je doet het zo:

<?php

$debug = true; // false als alles goed lijkt te werken

error_reporting(0);
if($debug)
{
error_reporting(E_ALL);
ini_set('display_errors', '1');
}

if(isset($_GET['naam'])){
if(!$debug)
header( 'Content-type: image/jpeg' );

$naam = $_GET['naam'];

include_once('test.php'); // <========== wat is dat? toch geen output he?

$twitter = new getTweet;
$get = $twitter->ask("http://rody.vdpol.net/twitter/tweets_json.php?screen_name=" . $naam . "&count=1&include_entities=1&include_rts=1");

foreach($get as $tweet)
{
$test1 = "Auteur: " . $naam ."";
$test3 = "Tweet: " . $tweet['text'] . "";
}

$fotonaam = "twit.jpg";
$fotonaamnew = "" . $naam . ".jpg";
$im = imagecreatefromjpeg($fotonaam);

$stamp = imagecreatetruecolor(300, 130);
$im = imagecreatefromjpeg($fotonaam);
imagestring($stamp, 9, 20, 20, $test1, 0xFFFFFF);
imagestring($stamp, 3, 20, 40, $test3, 0xFFFFFF);

$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);

if(!$debug)
imagejpeg($im);

imagedestroy($im);
}
else if($debug)
{
echo "Er is geen gebruikersnaam ingevuld!";
}
?>
Thanks. Zodra ik jouw script toepas, is de pagina helemaal leeg. Geen errors en geen afbeelding.. :s
<?php
class getTweet
{
function ask($url)
{
$info = file_get_contents($url);
$string = json_decode($info, 1);
return $string;
}
}
?>
Okee,

en wat is je uiteindelijk doel? wil je de profielfoto's op je website tonen? wil je ze opslaan op je eigen server?

want in die array ($get) staan gewoon url's naar de afbeeldingen zoals

http://abs.twimg.com/sticky/default_profile_images/default_profile_5_normal.png


Toevoeging op 14/04/2014 17:41:44:

Deze werkt al is het nog verre van ideaal:

<?php

class getTweet
{
function ask($url)
{
$info = file_get_contents($url);
$string = json_decode($info, 1);
return $string;
}
}

$debug = false; // false als alles goed lijkt te werken

error_reporting(0);
if($debug)
{
error_reporting(E_ALL);
ini_set('display_errors', '1');
}

if(isset($_GET['naam'])){
if(!$debug)
header( 'Content-type: image/jpeg' );

$naam = $_GET['naam'];

$twitter = new getTweet;
$get = $twitter->ask("http://rody.vdpol.net/twitter/tweets_json.php?screen_name=" . $naam . "&count=1&include_entities=1&include_rts=1");

$fotonaam = $get[0]['user']['profile_image_url'];
$fotonaamnew = "" . $naam . ".jpg";
$im = imagecreatefrompng($fotonaam);

$stamp = imagecreatetruecolor(300, 130);
$im = imagecreatefrompng($fotonaam);
imagestring($stamp, 9, 20, 20, $test1, 0xFFFFFF);
imagestring($stamp, 3, 20, 40, $test3, 0xFFFFFF);

$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);

if(!$debug)
imagepng($im);

imagedestroy($im);
}
else if($debug)
{
echo "Er is geen gebruikersnaam ingevuld!";
}
?>

Toevoeging op 14/04/2014 17:43:39:

als je wilt zien wat er in die array $get zit doe dan:

<?php

echo '<pre>';

print_r($get);

echo '</pre>';

?>
Ik heb ondervonden dat het aan de BOM ding lag, die rare tekens zijn nu dus weg. Nu staat er dat de afbeelding beschadigt is. Hoe los ik dit op?

Reageren