Fehler beim Öffnen des Streams: HTTP-Wrapper unterstützt keine beschreibbaren Verbindungen

75

Ich habe meine localhost-Dateien auf meine Website hochgeladen, aber es zeigt mir diesen Fehler: -

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

Was ich persönlich fühle, dass der Inhalt in einer Datei im Cache-Ordner gespeichert wird und wenn ich die Dateien auf meinen Webserver hochgeladen habe, versucht es, auf den zwischengespeicherten localhost-Ordner zuzugreifen.

Django Anonym
quelle

Antworten:

162

Stattdessen file_put_contents(***WebSiteURL***...)müssen Sie den Serverpfad zu /cache/lang/file.php(z /home/content/site/folders/filename.php. B. ) verwenden.

Sie können eine Datei nicht öffnen HTTPund erwarten, dass sie geschrieben wird. Stattdessen müssen Sie es über den lokalen Pfad öffnen.

zog010
quelle
Ich benutze Amazon Webservices S3 Speicherbereich. Ich habe nicht den Serverpfad, sondern nur die URL. Wie komme ich an den Weg?
Neocortex
@BannedfromSO Ich bin mit dem s3-Speicherbereich nicht allzu vertraut, aber ich vermute, Sie können file_put_contents nicht verwenden und müssen stattdessen deren API oder http put verwenden.
zog010
1
Tatsache ist, dass ich das Bild hochladen konnte, aber es zeigt 0 Bytes nach Abschluss des Uploads. Ja, ich verwende das AWS PHP SDK-Kit.
Neocortex
@BannedfromSO Könnte dann eine neue Frage erstellen wollen, ich bin mir nicht sicher, wie sie mit diesem Beitrag zusammenhängt.
Draw010
1
@Neocortex Ich weiß, dass dies alt ist, aber für zukünftige Referenzzwecke oder andere Leser ist es möglich, file_put_contents für Dateien in S3 zu verwenden, wenn Sie den S3 StreamWrapper im PHP AWS SDK verwenden. blogs.aws.amazon.com/php/post/TxKV69TBGSONBU/…
tpankake
16

Sie könnten die Funktion fopen () verwenden.

ein Beispiel:

$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);
    }
Der Bumpaster
quelle
1
Danke vielmals. Ich habe viele Lösungen ausprobiert, aber dies ist die einzige, die für mich funktioniert hat.
moreirapontocom
Kein Problem: D: D
The Bumpaster
1

Möge dieser Code Ihnen helfen. In meinem Fall funktioniert es.

$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);
Birendra Maharjan
quelle