【问题标题】:failed to open stream: HTTP wrapper does not support writeable connections无法打开流:HTTP 包装器不支持可写连接
【发布时间】:2012-04-02 15:13:15
【问题描述】:

我已将本地主机文件上传到我的网站,但它显示此错误:-

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

我个人认为内容保存在缓存文件夹中的文件中,当我将文件上传到我的 Web 服务器时,它正试图访问缓存的 localhost 文件夹。

【问题讨论】:

    标签: php caching


    【解决方案1】:

    您需要使用/cache/lang/file.php 的服务器路径而不是file_put_contents(***WebSiteURL***...)(例如/home/content/site/folders/filename.php)。

    您不能通过HTTP 打开文件并期望它被写入。相反,您需要使用本地路径打开它。

    【讨论】:

    • 我正在使用 amazon webservices s3 存储区。我没有服务器路径,只有 URL。 如何获取路径?
    • @BannedfromSO 我对 s3 存储区域不太熟悉,但我猜你不能使用 file_put_contents 并且需要使用他们的 API 或 http put 来代替。
    • 事实上我可以上传图片,但上传完成后显示0字节。是的,我正在使用 AWS PHP SDK 工具包。
    • @BannedfromSO 那么可能想创建一个新问题,我不确定它与这篇文章的关系如何。
    • @Neocortex 我知道这已经过时了,但是如果您在 PHP AWS SDK 中使用 S3 StreamWrapper,那么为了将来的参考或其他读者,可以将 file_put_contents 用于 S3 上的文件。 blogs.aws.amazon.com/php/post/TxKV69TBGSONBU/…
    【解决方案2】:

    你可以使用 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);
        }
    

    【讨论】:

    • 非常感谢。我尝试了很多解决方案,但这是唯一对我有用的。
    • 没问题 :D :D
    【解决方案3】:

    希望这段代码对您有所帮助。它适用于我的情况。

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

    【讨论】:

      【解决方案4】:

      因为使用网址,不能使用http写入数据。不要使用: http:// 或 https:// 在您的位置上传文件或保存数据或类似的东西。而不是使用 $_SERVER["HTTP_REFERER"] 使用 $_SERVER["DOCUMENT_ROOT"]。 例如:

      错了:

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

      正确:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-08
        相关资源
        最近更新 更多