无法打开流:HTTP包装器不支持可写连接


75

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

: [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文件夹。

Answers:


162

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

您不能重新打开文件HTTP并期望将其写入。相反,您需要使用本地路径打开它。


我正在使用Amazon WebServices S3存储区域。我没有服务器路径,但只有URL。怎么走?
Neocortex 2014年

@BannedfromSO我对s3存储区域不太熟悉,但是我猜您不能使用file_put_contents,而需要使用其API或http put。
drew010

1
事实是我可以上传图片,但上传完成后显示0字节。是的,我正在使用AWS PHP SDK工具包。
Neocortex 2014年

@BannedfromSO可能想创建一个新问题,但我不确定与该帖子有何关系。
drew010

1
@Neocortex我知道这很旧,但是如果您在PHP AWS开发工具包中使用S3 StreamWrapper,则可以对S3上的文件使用file_put_contents供以后参考或其他读者使用。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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.