2010-11-10 6 views
2

J'ai du mal à travailler avec curl et les en-têtes renvoyés par les serveurs.php, curl, en-têtes et type de contenu

1) Mon fichier php sur my_website.com/index.php ressemble à ceci (version réduite):

<?php 

$url = 'http://my_content_server.com/index.php'; 

//Open connection 
$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

//execute post 
$result = curl_exec($ch); 
//close connection 
curl_close($ch); 

echo $result; 
?> 

Le fichier php sur my_content_server.com/index.php ressemble à ceci:

<?php 
header("HTTP/1.0 404 Not Found - Archive Empty"); 
echo "Some content > 600 words to make chrome/IE happy......"; 
?> 

Je m'attends à ce que quand je visite my_website.com/index.php, je devrais obtenir un 404, mais cela ne se produit pas.

Qu'est-ce que je fais mal?

2) Au fond ce que je veux réaliser est:

my_content_server.com/index.php décidera du type de contenu et envoyer les en-têtes appropriés et my_website.com/index.php doit simplement envoyer le même Content- type et autres en-têtes (avec les données réelles) au navigateur. Mais il semble que my_website.com/index.php écrit ses propres en-têtes? (Ou peut-être que je ne comprends pas le fonctionnement correct).

salutations, JP

+1

tête' ('HTTP/1.0 404 Not Found - Archive Empty'); exit; ' – ajreal

+0

^note le' exit' – Calvin

+0

Est-ce que la sortie est importante si c'est la dernière instruction? (Je suppose que je suis autorisé à faire écho après l'envoi de l'en-tête 404?). –

Répondre

3

Insérer avant curl_exec():

curl_setopt($ch,CURLOPT_HEADER,true); 

Au lieu d'echo « ing le résultat, en avant les en-têtes au client ainsi:

list($headers,$content) = explode("\r\n\r\n",$result,2); 
foreach (explode("\r\n",$headers) as $hdr) 
    header($hdr); 
echo $content; 
+0

Cela a un effet, cependant, pas ce que je voulais. Après avoir défini ce drapeau, l'en-tête est affiché textuellement par my_website.com/index.php. HTTP/1.0 404 Introuvable - Archive Vide Date: Mer, 10 Nov 2010 08:09:30 GMT Serveur: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.6 avec Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g X-Powered-By: PHP/5.2.6-3ubuntu4.6 Varier: Accepter-Encoder Contenu-Longueur: 282 Connexion: fermer Content-Type: text/html. Je navigue client ne reçoit toujours pas erreur 404. –

+0

Voir ma réponse modifiée. – stillstanding

+0

Merci pour le conseil. Cela a une erreur que je suis incapable de tracer. J'ai activé display_errors et j'ai obtenu ceci: Remarque: Offset non défini: 1 dans /var/www/index.php sur la ligne 42 Avertissement: L'en-tête ne doit pas contenir plus d'un en-tête, une nouvelle ligne est détectée. dans /var/www/index.php sur la ligne 44. 42 line est la ligne "explode" et 44 la ligne header ($ hdr). –