81 votes

échec de l'ouverture du flux : le wrapper HTTP ne prend pas en charge les connexions inscriptibles

J'ai téléchargé mes fichiers localhost sur mon site web, mais j'obtiens l'erreur suivante : -.

: [2] file_put_contents( ***WebsiteURL*** /cache/lang/ ***FileName*** .php) 
[function.file-put-contents]: failed to open stream: HTTP wrapper does 
not support writeable connections | LINE: 127 | FILE: /home/content/
***Folders\FileName*** .php

Ce que je ressens personnellement, c'est que le contenu est sauvegardé dans un fichier dans le dossier cache et que lorsque j'ai téléchargé les fichiers sur mon serveur web, il essaie d'accéder au dossier localhost en cache.

174voto

drew010 Points 32825

Au lieu de faire file_put_contents(***WebSiteURL***...) vous devez utiliser le chemin du serveur pour /cache/lang/file.php (par exemple /home/content/site/folders/filename.php ).

Vous ne pouvez pas ouvrir un fichier sur HTTP et s'attendre à ce qu'il soit écrit. Au lieu de cela, vous devez l'ouvrir en utilisant le chemin local.

0 votes

J'utilise la zone de stockage amazon webservices s3. Je n'ai pas le chemin du serveur mais juste l'URL. Comment obtenir le chemin ?

0 votes

@BannedfromSO Je ne suis pas trop familier avec l'espace de stockage s3 mais je suppose que vous ne pouvez pas utiliser file_put_contents et que vous devez utiliser leur API ou http put à la place.

1 votes

Le fait est que j'ai pu télécharger l'image mais qu'elle affiche 0 octet une fois le téléchargement terminé. Oui, j'utilise le kit AWS PHP SDK.

18voto

The Bumpaster Points 642

Vous pouvez utiliser la fonction fopen().

un exemple :

$url = 'http://doman.com/path/to/file.mp4';
$destination_folder = $_SERVER['DOCUMENT_ROOT'].'/downloads/';

    $newfname = $destination_folder .'myfile.mp4'; //set your file ext

    $file = fopen ($url, "rb");

    if ($file) {
      $newf = fopen ($newfname, "a"); // to overwrite existing file

      if ($newf)
      while(!feof($file)) {
        fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );

      }
    }

    if ($file) {
      fclose($file);
    }

    if ($newf) {
      fclose($newf);
    }

1 votes

Merci beaucoup. J'ai essayé beaucoup de solutions mais c'est la seule qui a fonctionné pour moi.

0 votes

Pas de problème :D :D

1voto

Que ce code vous aide. Il fonctionne dans mon cas.

$filename = "D:\xampp\htdocs\wordpress/wp-content/uploads/json/2018-10-25.json";
    $fileUrl = "http://localhost/wordpress/wp-content/uploads/json/2018-10-25.json";
    if(!file_exists($filename)):
        $handle = fopen( $filename, 'a' ) or die( 'Cannot open file:  ' . $fileUrl ); //implicitly creates file
        fwrite( $handle, json_encode(array()));
        fclose( $handle );
    endif;
    $response = file_get_contents($filename);
    $tempArray = json_decode($response);
    if(!empty($tempArray)):
        $count = count($tempArray) + 1;
    else:
        $count = 1;
    endif;
    $tempArray[] = array_merge(array("sn." => $count), $data);
    $jsonData = json_encode($tempArray);
    file_put_contents($filename, $jsonData);

1voto

user2215032 Points 49

C'est à cause de l'utilisation de l'adresse web, vous ne pouvez pas utiliser http pour écrire des données. n'utilisez pas : http:// ou https:// dans votre emplacement pour télécharger des fichiers ou enregistrer des données ou quelque chose comme ça. Au lieu d'utiliser $_SERVER["HTTP_REFERER"], utilisez $_SERVER["DOCUMENT_ROOT"]. par exemple :

faux :

move_uploaded_file($_FILES["File"]["tmp_name"],$_SERVER["HTTP_REFERER"].'/uploads/images/1.jpg')

correct :

move_uploaded_file($_FILES["File"]["tmp_name"],$_SERVER["DOCUMENT_ROOT"].'/uploads/images/1.jpg')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X