【问题标题】:Collecting file with PHP CURL after validating request downloads an empty file验证请求后使用 PHP CURL 收集文件会下载一个空文件
【发布时间】:2015-06-12 16:49:08
【问题描述】:

我正在做一个系统,其中我的一个站点转到另一个站点以获取文档。 在第一个站点上,我使用 Curl 请求获取所需文件: 我正在使用Download file from URL using CURL 的解决方案:

function collect_file($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, false);
        curl_setopt($ch, CURLOPT_REFERER, "http://example.com");
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $result = curl_exec($ch);
        curl_close($ch);
        echo $result;
        return($result);
    }

    function write_to_file($text,$new_filename){
        $fp = fopen($new_filename, 'w');
        fwrite($fp, $text);
        fclose($fp);
    }

    $curlUrl = 'http://site2.com/file-depository/14R4NP8JkoIHwIyjnexSUmyJibdpHs5ZpFs3NLFCxcs54kNhHj';

            $new_file_name = "testfile-new.png";
            $temp_file_contents = collect_file($curlUrl);
            write_to_file($temp_file_contents,$new_file_name);

我正在测试下载图像。如果我在 $curlUrl 中使用直接 URL,例如 http://site2.com/file-depository/image.png 它就完美了。

我正在做的是然后解析 URL http://site2.com/file-depository/14R4NP8JkoIHwIyjnexSUmyJibdpHs5ZpFs3NLFCxcs54kNhHj 并根据数据库检查以匹配请求的文档,一旦有匹配的文档,我需要将此文档提供给 Curl 响应。 我尝试了很多方法来读取文件,但每次我在另一端得到一个文件,但它的大小只有 1kb(预期为 45),当试图打开它时,我得到一个错误未知文件类型等。

在第二个站点上,一旦 URL 得到验证,这里就是我所拥有的:

$file = readfile('some-image.png');
echo $file;

我猜有一部分属于文件的信息丢失但无法弄清楚,任何指针不胜感激!

【问题讨论】:

  • 您的 write_to_file 是多余的...只需使用 file_put_contents()。您是否尝试将“png”文件加载到文本编辑器中以查看真正写出的内容?您的代码甚至都没有意识到可能出现问题的可能性,而在处理外部资源时,这正是错误的做法。
  • 我已将此处发布的代码减少到最少,以使其尽可能简单易读,并且我仅在此阶段进行测试,随后将进行错误处理...

标签: php curl


【解决方案1】:

我换了

function write_to_file($text,$new_filename){
    $fp = fopen($new_filename, 'w');
    fwrite($fp, $text);
    fclose($fp);
}

通过 file_put_contents($new_file_name,trim($temp_file_contents)); 请注意 trim(),问题是我显然在文件内容前面收集了一些空白空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多