8
votes

Envoi d'un fichier via HTTP Mise en PHP

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

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éé.

Toute aide avec cela serait grandement appréciée.

Voici quelques échantillons de code J'ai essayé d'utiliser des flux PHP xxx


1 commentaires

Pouvez-vous fournir un code source s'il vous plaît?


5 Réponses :


9
votes

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: xxx


2 commentaires

Peux-tu expliquer? Était-ce l'ajout de la touche de contenu 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.



0
votes

Si votre interface SOAP est activée, une bibliothèque open source appelée PhExist Cela faciliterait l'interaction avec la base de données.


0 commentaires

0
votes
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/

2 commentaires

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



4
votes

CURL fonctionne pour moi. Voici un extrait de mon code, xxx

éditer: vient de mettre à jour mon code. Je n'utilise pas d'authentification moi-même donc cela n'est pas testé.


1 commentaires

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?



3
votes

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);
}


0 commentaires