PHP readfile()如何处理返回值

时间:2016-12-30 23:33:45

标签: php return-value readfile

我正在学习PHP,所以这是教育目的的问题。由于我无法在我使用的教程中找到答案,因此对您来说很清楚。

所以,想象一下我们有一个文件" text.txt"和内容是:

"Hello World!"

以下PHP脚本:

<?php

echo readfile("text.txt");

?>

将输出&#34; Hello World!12&#34; - 当这样的输出有用时,我无法想到任何情况,但我发现如果我不想在最后看到文件长度,我就省略&#34 ;回声&#34;:

<?php

readfile("text.txt");

?>

输出将是&#34; Hello World!&#34;。这是一种更好的方法,但手动说:&#34;返回从文件中读取的字节数。&#34;,所以我的问题是 - 我应该如何使用readfile()函数获取文件长度?根据我的逻辑,&#34;返回&#34;文件内容,但我觉得我没有做对。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

所以你想用readfile()读取文件的大小?当然,但这个功能也输出文件。没什么大不了的,我们可以在这种情况下使用:output buffering

<?php

ob_start();
$length = readfile("text.txt");
// the content of the file isn't lost as well, and you can manipulate it
$content = ob_get_clean();

echo $length;

?>

答案 1 :(得分:1)

readfile不用于以您编写的方式获取文件大小或文件内容。它通常用于将文件发送到客户端。例如,假设您在客户提交表单或单击某个链接后在Web应用程序中创建了pdf文件。有时您可以直接将它们指向文件,但有时您出于某些原因(安全等)不希望这样。这样你可以这样做:

如何使用它。

    $filepath = "../files/test.pdf";

    header("Content-Description: File Transfer");
    header("Content-Type: application/pdf; charset=UTF-8");
    header("Content-Disposition: inline; filename='test.pdf'");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($filepath));
    readfile($filepath);
    exit;

您可以使用它的示例。

    $filepath = "../files/test.pdf";

    ob_start();
    $filesize = readfile($filepath);
    $content = ob_get_clean();

    header("Content-Description: File Transfer");
    header("Content-Type: application/pdf; charset=UTF-8");
    header("Content-Disposition: inline; filename='test.pdf'");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . $filesize );

    echo $content;

    exit;

因此,除了正确的标题之外,您还可以输出文件内容,以便浏览器将其标识为pdf文件并打开它。