Faire du roulage de sortie STDERR dans un fichier (ou une chaîne)
Nous essayons de debug cURL erreurs sur le serveur, et je voudrais voir le STDERR journal. Actuellement, tout ce que nous pouvons voir de nos erreur "code d'erreur: 7" et que l'on ne peut pas se connecter au serveur cible. Nous avons pris contact avec l'hôte et fait règle spéciale pour ouvrir le port dont nous avons besoin et nous sommes même en ignorant le certificat pour le moment.
Encore, on ne peut pas se connecter. J'ai besoin de débogage, mais je ne peux pas voir les informations pertinentes sur ma fin.
Les lignes de mentionner "VERBOSE" et "STDERR" sont les plus importantes, je pense. Rien n'est écrit à $curl_log. Ce que je fais mal? Suivant les manuels de logique, ce devrait être correct...
PHP en cours d'utilisation:
<?php
$curl = curl_init();
$curl_log = fopen("curl.txt", 'w');
$url = "http://www.google.com";
curl_setopt_array($curl, array(
CURLOPT_URL => $url, //Our destination URL
CURLOPT_VERBOSE => 1, //Logs verbose output to STDERR
CURLOPT_STDERR => $curl_log, //Output STDERR log to file
CURLOPT_SSL_VERIFYPEER => 0, //Do not verify certificate
CURLOPT_FAILONERROR => 0, //true to fail silently for http requests > 400
CURLOPT_RETURNTRANSFER => 1 //Return data received from server
));
$output = fread($curl_log, 2048);
echo $output; //This returns nothing!
fclose($curl_log);
$response = curl_exec($curl);
//...restofscript...
?>
De manuel PHP: http://php.net/manual/en/function.curl-setopt.php
CURLOPT_VERBOSE fidèle à la sortie des informations détaillées. Écrit sortie STDERR
CURLOPT_STDERR Un emplacement alternatif pour les erreurs de sortie à la place de STDERR.
Il n'est pas un problème de permission, j'ai mis le fichier de script et de permissions à 777 sur le côté serveur et mon client est windows et n'a jamais soucié des paramètres d'autorisation (c'est uniquement pour le dev de toute façon).
curl_exec()
est manquant. Et quelle est la puissance que vous attendez (et pourquoi)?Oh, ouais je l'ai fait dans mon copier/coller. Mettre curl_exec de retour dans. J'espère obtenir une sorte de débogage de l'information, bien que vraiment je n'ai aucune idée à quoi s'attendre de lui. Je n'ai aucune idée de ce qui est à l'origine de l'échec de la connexion sur le serveur de fin.
Vous pouvez trouver code-exemples dans une réponse à une autre question, y compris faire cela en mémoire et non sur le disque
OriginalL'auteur Radley Sustaire | 2012-01-15
Vous devez vous connecter pour publier un commentaire.
Vous faites quelques erreurs dans ton exemple:
1) vous devez appeler
curl_exec()
avant la lecture du "journal détaillé", parce quecurl_setopt()
ne pas effectuer n'importe quelle action, alors rien ne peut être enregistré avant la curl_exec().2) vous êtes ouverture
$curl_log = fopen("curl.txt", 'w');
seulement pour l'écriture, rien ne pouvait être lu, même après que vous écrivez dans le fichier et de rembobinage interne pointeur de fichier.Donc la bonne raccourcie code devrait ressembler à:
REMARQUE: journal détaillé pourrait être plus longue que 2048 octets, de sorte que vous pourriez "fclose" $curl_log après curl_exec (), puis lire le fichier en entier par exemple file_get_contents().
Dans ce cas, le point de 2) ne doit pas être considéré comme erreur 🙂
OriginalL'auteur Jonez1
Un peu en retard à la fête, mais cette page est encore apparaît élevé dans Google, donc let's go.
Il semble que CURLOPT_VERBOSE ne pas se connecter quoi que ce soit si CURLINFO_HEADER_OUT est également définie sur TRUE.
C'est un savoir bug dans PHP (#65348), et pour des raisons qu'ils ont décidé de ne pas le fixer.
OriginalL'auteur DavidKunz
Mettre al réponses ci-dessus ensemble, j'ai utiliser cette fonction pour faire une boucle d'une Requête Post avec loggin à un fichier option:
Espère que cela contribuera à quelqu'un.
$defaults[CURLINFO_HEADER_OUT]=1;
détaillé à ne pas avoir d'écrit quand CURLINFO_HEADER_OUT est activéOriginalL'auteur ontananza
De manuel php pour la fonction curl_setopt:
OriginalL'auteur rkosegi
Vous devriez mettre
après
$response = curl_exec($curl);
sinon, le fichier est fermé pendant le roulage est en cours d'exécution.OriginalL'auteur Mine