Я столкнулся с проблемой, которая заставляет меня чесать голову уже пару дней. Я использую jQuery Uploadify для загрузки файлов на веб-сервер. Я использую слегка измененный скрипт uploadify.php, который обрабатывает загрузку файла:
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . "/file-repository/" . $_REQUEST['folder'] . '/';
$targetFilename = str_replace(" ","-",$_FILES['Filedata']['name']);
$targetFilename = preg_replace('/[^a-zA-Z0-9-_.]/', '', $targetFilename);
$targetFile = str_replace('//','/',$targetPath) . $targetFilename;
move_uploaded_file($tempFile,$targetFile);
echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);
}
?>
Этот скрипт работал нормально до вчерашнего дня. Теперь выдает следующую ошибку:
Предупреждение: move_uploaded_file(/home/server/public_html/devhealth-safety/administration/group/image.jpg) [function.move-uploaded-file]: не удалось открыть поток: нет такого файла или каталога в /home/tdserver/public_html/sb3/lib/js/uploadify/uploadify.php в строке 46
Предупреждение b>: move_uploaded_file() [function.move-uploaded-file]: невозможно переместить \'/tmp/phpYH8nfH\' в \'/home/server/public_html/devhealth-safety/administration/group/image.jpg\' в /home/server/public_html/dev/lib/js/uploadify/uploadify.php в строке 46
По какой-то причине часть . "/file-repository/" .
в uploadify.php удалена, что означает, что скрипт пытается переместить файл по поддельному пути на сервере.
Теперь, как я уже сказал, сценарий работал, и я не модифицировал его. Я поигрался со структурой папок, но путь к файлу правильный, папка file-repository
имеет все разрешения на чтение/запись/выполнение и принадлежит группе владельца и владельца PHP (в данном случае это nobody:nobody
). Так что я бы не подумал, что мои возни с папками как-то связаны с этой проблемой (хотя кто знает?)
Как ни странно, если я заменю . "/file-repository/" .
на . "/filerepository/" .
, скрипт выдаст ожидаемую ошибку:
Предупреждение: move_uploaded_file(/home/server/public_html/dev/filerepository/health-safety/administration/group/image.jpg) [function.move-uploaded-file]: не удалось открыть поток: Нет такой файл или каталог в /home/tdserver/public_html/sb3/lib/js/uploadify/uploadify.php в строке 46
Итак, вопрос... почему PHP отбрасывает часть строки, содержащую дефис? Любые идеи?