Php &引用;文件“获取内容()”;仅返回第一个块(WebDAV)

Php &引用;文件“获取内容()”;仅返回第一个块(WebDAV),php,webdav,chunked-encoding,Php,Webdav,Chunked Encoding,我是一名学生,不熟悉PHP(以及一般的web开发),我正在尝试用我学院的WebDAV服务器编写一个简单的界面 下面的代码(具有适当的凭据和地址)使用了我找到的HTTP WebDAV客户端插件(),成功地从我尝试过的.txt/.html/.js文件返回了前8k数据,但没有更多 据我所知,可能的罪魁祸首是服务器正在使用分块传输编码(这是有意义的),这让我相信我将不得不读取数据流,而不是单个文件/分块(同样,我是新手)。如果是这样的话,我不确定如何做到这一点 我的理解是,cURL可能是实现这一点的最快

我是一名学生,不熟悉PHP(以及一般的web开发),我正在尝试用我学院的WebDAV服务器编写一个简单的界面

下面的代码(具有适当的凭据和地址)使用了我找到的HTTP WebDAV客户端插件(),成功地从我尝试过的.txt/.html/.js文件返回了前8k数据,但没有更多

据我所知,可能的罪魁祸首是服务器正在使用分块传输编码(这是有意义的),这让我相信我将不得不读取数据流,而不是单个文件/分块(同样,我是新手)。如果是这样的话,我不确定如何做到这一点

我的理解是,cURL可能是实现这一点的最快方法,但我认为Dreamhost没有为php启用cURL

//this loads the HTTP_WebDAV_Client plugin:
//  https://github.com/pear/HTTP_WebDAV_Client
require_once "HTTP/WebDAV/Client.php";

    //this is for testing purposes only (for obvious reasons)
    $user = $_GET['user'];
    $pass = $_GET['pass'];
    $fileName = $_GET['fileName'];

    //actual address obscured
    $dir = "webdavs://" . $user . ":" . $pass . "@webfs.xxx.com/main/hcwebdav/";

    $file = fopen($dir.$fileName, "rb");
    //$content;

    if (!$file) {

        die("Error opening file :( $user $pass");

    } else {
        //This returns only the first chunk:
        echo file_get_contents($dir.$fileName);

        //this has the same behavior
        /*
        while ($line = fread($file, 8192)) {
            $content .= $line;
        }
        echo $content;

        fclose($file);
        */

    }
我希望这个问题不要太愚蠢:/我正试图编写web应用程序来帮助入门级学生学习编码,这个插件将使他们从基于浏览器的代码编辑器/mini IDE发布自己的网站变得非常容易


干杯

我的建议远离了您正在使用的软件包和您的问题,但是SabreDAV是PHP社区中最流行的WebDAV,为什么不使用它呢

  • 文件单元:

@adeneo-我是否应该假设我的问题的答案是标准文件操作在分块流上不起作用?我对它(主要是)使用简单的fopen()/fread()命令感到非常兴奋,我想我没有考虑过使用完全不同的方法。