không thể mở luồng: Trình bao bọc HTTP không hỗ trợ các kết nối có thể ghi


75

Tôi đã tải các tệp localhost lên trang web của mình nhưng nó hiển thị cho tôi lỗi này: -

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

Cá nhân tôi cảm thấy rằng nội dung được lưu trong một tệp trong thư mục bộ nhớ cache và khi tôi tải các tệp lên máy chủ web của mình, nó đang cố gắng truy cập vào thư mục localhost được lưu trong bộ nhớ cache.

Câu trả lời:


162

Thay vì làm, file_put_contents(***WebSiteURL***...)bạn cần sử dụng đường dẫn máy chủ đến /cache/lang/file.php(ví dụ:/home/content/site/folders/filename.php ).

Bạn không thể mở một tệp HTTPvà mong đợi nó được ghi. Thay vào đó, bạn cần mở nó bằng cách sử dụng đường dẫn cục bộ.


Tôi đang sử dụng vùng lưu trữ webservices s3 của amazon. Tôi không có đường dẫn máy chủ mà chỉ có URL. Làm thế nào để có được đường dẫn?
Neocortex

@BannedfromSO Tôi không quá quen thuộc với vùng lưu trữ s3 nhưng tôi đoán bạn không thể sử dụng file_put_contents và cần sử dụng API hoặc http put của họ để thay thế.
vẽ 010

1
Thực tế là tôi có thể tải lên hình ảnh nhưng nó hiển thị 0 byte sau khi tải lên hoàn tất. Có, tôi đang sử dụng bộ AWS PHP SDK.
Neocortex

@BannedfromSO Có thể muốn tạo một câu hỏi mới, tôi không chắc nó liên quan đến bài đăng này như thế nào.
vẽ 010

1
@Neocortex Tôi biết cái này đã cũ, nhưng để tham khảo trong tương lai hoặc những người đọc khác, bạn có thể sử dụng file_put_contents cho các tệp trên S3 nếu bạn sử dụng S3 StreamWrapper trong PHP AWS SDK. blogs.aws.amazon.com/php/post/TxKV69TBGSONBU/…
tpankake

16

bạn có thể sử dụng hàm fopen ().

một số ví dụ:

$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
Cảm ơn rất nhiều. Tôi đã thử rất nhiều giải pháp nhưng đây là giải pháp duy nhất phù hợp với tôi.
moreirapontocom

Không thành vấn đề: D: D
The Bumpaster

1

Có thể mã này sẽ giúp bạn. Nó hoạt động trong trường hợp của tôi.

$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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.