не вдалося відкрити потік: обгортка HTTP не підтримує підключення, що записуються


75

Я завантажив свої файли localhost на свій веб-сайт, але він показує мені цю помилку: -

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

Я особисто відчуваю, що вміст зберігається у файлі в папці кешу, і коли я завантажую файли на свій веб-сервер, він намагається отримати доступ до кешованої папки localhost.

Відповіді:


162

Замість того, щоб робити, file_put_contents(***WebSiteURL***...)вам потрібно використовувати шлях до сервера /cache/lang/file.php(наприклад /home/content/site/folders/filename.php).

Ви не можете відкрити файл HTTPі очікувати, що він буде записаний. Натомість вам потрібно відкрити його за допомогою локального шляху.


Я використовую зону зберігання веб-служб Amazon. У мене немає шляху до сервера, а лише URL-адреса. Як дістати шлях?
Neocortex

@BannedfromSO Я не надто знайомий з областю зберігання s3, але я здогадуюсь, що ви не можете використовувати file_put_contents, а замість цього потрібно використовувати їх API або http.
draw010

1
Справа в тому, що я міг завантажити зображення, але воно показує 0 байт після завершення завантаження. Так, я використовую комплект AWS PHP SDK.
Neocortex

@BannedfromSO Тоді міг би створити нове запитання, я не впевнений, наскільки це пов'язано з цим повідомленням.
малював010

1
@Neocortex Я знаю, що це старе, але для подальших довідників чи інших читачів можна використовувати file_put_contents для файлів на S3, якщо ви використовуєте S3 StreamWrapper у PHP AWS SDK. blogs.aws.amazon.com/php/post/TxKV69TBGSONBU/…
tpankake,

16

Ви можете використовувати функцію fopen ().

Якийсь приклад:

$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
Дуже дякую. Я спробував багато рішень, але це єдине, що мені вдалося.
moreirapontocom

Немає проблем: D: D
The Bumpaster

1

Нехай вам допоможе цей код. Це працює в моєму випадку.

$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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.