Zend Framework 操作中文件名中的空格类似于 readfile

发布于 2024-08-14 02:26:13 字数 783 浏览 7 评论 0原文

我从 PHP.net readfile 页面获取了这段代码:

<?php

// Action controller
public function someAction() {

    $response = $this->_response;

    // Disable view and layout rendering
    $this->_helper->viewRenderer->setNoRender();
    $this->_helper->layout()->disableLayout();

    // Process the file
    $file = 'whatever.zip';
    $bits = @file_get_contents($file);
    if(strlen($bits) == 0) {
        $response->setBody('Sorry, we could not find requested download file.');
    }
    else {
        $response->setHeader('Content-type', 'application/octet-stream', true);
        $response->setBody($bits);
    }
}

?>

它适用于大多数文件,但是当我在文件名中带有空格的文件上测试它时,它说找不到所请求的文件。有什么建议,或者是否有更好的方法在 Zend Framework 中执行读取文件,其中文件名可以包含空格?

I grabbed this bit of code from the PHP.net readfile page:

<?php

// Action controller
public function someAction() {

    $response = $this->_response;

    // Disable view and layout rendering
    $this->_helper->viewRenderer->setNoRender();
    $this->_helper->layout()->disableLayout();

    // Process the file
    $file = 'whatever.zip';
    $bits = @file_get_contents($file);
    if(strlen($bits) == 0) {
        $response->setBody('Sorry, we could not find requested download file.');
    }
    else {
        $response->setHeader('Content-type', 'application/octet-stream', true);
        $response->setBody($bits);
    }
}

?>

It works great with most files but when I test it on a file with spaces in the filename, it says it can't find the requested file. Any suggestions, or is there a better way to do a readfile in Zend Framework where the filename can have spaces in it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里的微风 2024-08-21 02:26:13

来自 file_get_contents()手册页:

注意:如果您使用以下命令打开 URI
特殊字符,例如空格,
你需要对 URI 进行编码
urlencode()

(编辑:使用 rawurlencode() 将空格转换为 %20 而不是 +

因此,您需要rawurlencode() 使用前的文件名它:

$file = rawurlencode('whatever.zip');

From the file_get_contents() manual page:

Note: If you're opening a URI with
special characters, such as spaces,
you need to encode the URI with
urlencode().

(Edit: Use rawurlencode() to convert spaces to %20 instead of +)

So, you need to rawurlencode() the filename before using it:

$file = rawurlencode('whatever.zip');
朦胧时间 2024-08-21 02:26:13

我用字符串替换去掉了文件名中的空格,现在它可以工作了:

$file = str_replace(" ","%20",$file);

I got rid of the space in the filename with a string replace and now it works:

$file = str_replace(" ","%20",$file);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文