У меня возникла небольшая проблема с PHP, на которой я застрял в данный момент. У меня есть файл с именем download.php, который обеспечивает безопасный доступ к загрузкам файлов, которые хранятся в личной папке на сервере. то есть на 1 уровень выше httpd.
Код выглядит так.
$Document = new Documents($DID);
$file = $Document->getfilewithdir();
header("Content-Description: File Transfer");
header("Content-length: " . $Document->getfilesize());
header("Content-type: " . $Document->getfiletype());
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-disposition: attachment; filename=\"" . basename($Document->getfilename()) . "\"");
readfile($file);
exit;
куда
$ Document-> getfilewithdir () возвращает что-то вроде /Applications/MAMP/htdocs/Portal_QCNW/private/portal_files/filename.docx
а также
$ Document-> getfilename () возвращает что-то вроде filename.docx.
Дополнительный код включен:
function setfilename($Val)
{
$this->c_Filename = $Val;
}
function getfilename()
{
return $this->c_Filename;
}
function getfilewithdir()
{
$path_parts = pathinfo($this->geturl());
$file_name = $path_parts['basename'];
return FILELOC . $file_name;
}
Это нормально, если в имени файла нет пробелов, но если в имени файла есть пробелы, т. Е. Имя файла.docx или имя файла (1) .docx, то оператор readfile возвращает «не удалось открыть поток». Что я могу сделать, чтобы обойти это и иметь дело с пробелами в именах файлов?
я использую https://blueimp.github.io/jQuery-File-Upload/ загрузить файл, и там может быть что-то, что я удалил пробелы на этапе загрузки.
Любые мысли и советы будут великолепны.
С уважением
Джеймс
Спасибо за вашу помощь. Я пересмотрел код и упростил его. Поскольку я передавал имя файла URL, оно было отформатировано как URL, а не как строка.
Все отсортировано сейчас.
Джеймс
Других решений пока нет …