2009-12-09 1 views
2

Я схватил этот кусок кода со страницы ReadFile PHP.net:Пробелы в имени файла в Zend Framework действие аналогично 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); 
    } 
} 

?> 

Он прекрасно работает с большинством файлов, но когда я проверить его на файл с пробелами в имени файла он говорит, что не может найти запрошенный файл. Любые предложения, или есть лучший способ сделать readfile в Zend Framework, где в имени файла могут быть пробелы?

ответ

1

На странице file_get_contents() вручную:

Примечание: Если вы открываете URI с специальные символы, такие как пробелы, вам нужно кодировать URI с urlencode().

(Edit: Использование rawurlencode() для преобразования пространства в %20 вместо +)

Итак, вам нужно rawurlencode() имя файла перед его использованием:

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

Нет кубиков там. Он помещает + в имя, и я получаю сообщение «Извините, мы не смогли найти запрошенный файл загрузки». – Stepppo

+0

Вы правы. Вместо этого используйте 'rawurlencode()'. Это переводит пробелы в '% 20' вместо' + '. Не используйте 'str_replace()' :) –

+0

Я не мог заставить rawurlencode() работать. Просто любопытно, почему бы не использовать str_replace()? – Stepppo

0

Я избавилась от пространство в имени файла с заменой строки и теперь оно работает:

$file = str_replace(" ","%20",$file); 
Смежные вопросы