Uploadify PHP скрипт загрузки, кажется, отбрасывает части строки с дефисом - PullRequest
1 голос
/ 01 сентября 2011

Я столкнулся с проблемой, которая заставляет меня чесать голову уже пару дней. Я использую 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 загруженного-файл]: не удалось открыть поток: нет такого файла или каталога в / дома / tdserver / public_html / SB3 / Библиотека / JS / Uploadify / uploadify.php on line 46

Предупреждение : move_uploaded_file () [Function.move загруженного-файл]: Невозможно переместить \ '/ tmp / phpYH8nfH \' в \ '/ Дом / сервер / public_html / devhealth-безопасности / управление / группа / image.jpg \' в / дом / сервер / public_html / DEV / Библиотека / 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 загруженного-файл]: не удалось открыть поток: нет такого файла или каталога в / дома / tdserver / public_html / SB3 / Библиотека / JS / Uploadify / uploadify.php на линии 46

Итак, вопрос в том ... почему PHP отбрасывает часть строки, которая содержит дефис? Есть идеи?

1 Ответ

0 голосов
/ 01 сентября 2011

в вашем регулярном выражении, дефис должен быть наконец помещен !!

'/[^a-zA-Z0-9-_.]/' should be '/[^a-zA-Z0-9_.-]/'
...