2

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 で readfile を実行するより良い方法はありますか?

4

2 に答える 2

1

file_get_contents()マニュアルページから:

注:スペースなどの特殊文字を使用してURIを開く場合は、URIを。でエンコードする必要があります urlencode()

(編集:rawurlencode()スペースを%20代わりにに変換するために使用します+

rawurlencode()したがって、使用する前にファイル名を確認する必要があります。

$file = rawurlencode('whatever.zip');
于 2009-12-09T18:45:20.577 に答える
0

ファイル名のスペースを文字列置換で削除したところ、動作するようになりました:

$file = str_replace(" ","%20",$file);
于 2009-12-10T01:07:03.087 に答える