Je me débats pendant plusieurs heures pour essayer de comprendre comment obtenir ce travail. J'essaie d'envoyer un fichier via http-mis à un dB existant. Il y a une authentification de l'utilisateur pour le serveur, alors j'essayais de faire quelque chose comme ceci:
J'ai l'URL où le Doc doit être mis à J'ai le nom d'utilisateur et le mot de passe pour l'existence dB J'ai le contenu qui doit être envoyé via le put p>
J'ai essayé de faire fonctionner avec boucle mais cela échouerait silencieusement J'ai essayé d'utiliser des flux PHP, mais j'ai gardé "Erreur 201 / créée" mais aucun fichier n'a été créé. P>
Toute aide avec cela serait grandement appréciée. P>
Voici quelques échantillons de code J'ai essayé d'utiliser des flux PHP p>
5 Réponses :
aha! Après un petit "canard en caoutchouc" avec la poupée en peluche naine grincheuse sur mon bureau ici, j'ai compris la solution:
Peux-tu expliquer? Était-ce l'ajout de la touche code> de contenu code> ou de la déclaration de retour?
C'était une chose: changer la façon dont je construisiez l'en-tête. Je dois toujours supprimer la sortie de fichiers_get_contents car il retourne un avertissement, mais je peux vivre avec cela pour le moment jusqu'à ce que je trouve un meilleur moyen de le piéger.
Si votre interface SOAP est activée, une bibliothèque open source appelée PhExist A > Cela faciliterait l'interaction avec la base de données. P>
function _publish($service, $doc) { $params = array( 'http' => array( 'method' => 'PUT')); $context = stream_context_create($params); $fp = fopen($service, 'rb', false, $context); $response = fwrite($fp,file_get_contents($doc)); if ($response === false) { return false; } // Pull out the status code from the header $metaData = stream_get_meta_data($fp); preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/", $metaData['wrapper_data'][0], $matches); $code = end($matches[1]); if ($code == 200) { return true; } else { return false; } } from http://www.littlehart.net/atthekeyboard/2008/01/11/how-to-http-put-a-file-somewhere-using-php/
Cela vient de mon propre blog et j'ai constaté que cela ne fonctionnait pas correctement. ;)
Je ne suis pas sûr si c'est hilarant, ou triste, ou les deux: o
CURL fonctionne pour moi. Voici un extrait de mon code, éditer: vient de mettre à jour mon code. Je n'utilise pas d'authentification moi-même donc cela n'est pas testé. P> p>
Je n'ai pas pu obtenir les trucs d'authentification HTTP à travailler avec CURL. Pouvez-vous mettre à jour cet exemple de curl pour l'utiliser?
Ceci fonctionne pour moi ...
function put($_server,$_file,$_data) { $fp = @fsockopen ($_server, 80, $errno, $errstr, 30); if ($fp) { $p = "PUT $_file HTTP/1.0\r\n"; $p.= "User-Agent: Mozilla/3.0 (Windows NT 5.0; U) Opera 7.21 [da]\r\n"; $p.= "Host: $_server\r\n"; $p.= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n"; $p.= "Accept-Language: da;q=1.0,en;q=0.9\r\n"; $p.= "Accept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\r\n"; $p.= "Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\n"; $p.= "Referer: http://www.nasa.gov/secret/flightplans.asp\r\n"; $p.= "Content-type: application/x-www-form-urlencoded\r\n"; $p.= "Content-length: ".strlen($_data)."\r\n"; $p.= "\r\n"; $p.= $_data; //echo($p); fputs ($fp, $p); } else die("dagnabbit : $errstr"); while ($l=fgets($fp)) echo($l); fclose($fp); }
Pouvez-vous fournir un code source s'il vous plaît?