WedX - журнал о программировании и компьютерных науках

Uploadify Скрипт загрузки PHP, кажется, отбрасывает части строки с дефисом

Я столкнулся с проблемой, которая заставляет меня чесать голову уже пару дней. Я использую 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

Предупреждение: 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 отбрасывает часть строки, содержащую дефис? Любые идеи?


  • Из кода и информации, которую вы разместили, ошибка не имеет смысла. Часть информации, которую вы разместили, должна быть неверной. Поэтому я бы посоветовал вам попробовать еще раз и быть особенно осторожным, чтобы убедиться, что выполняется именно тот код, который вы ожидаете (очистка кеша, перезапуск веб-сервера и т. д.). 01.09.2011
  • Точнее, смысла нет. Я очистил кеш и перезапустил сервер. Все безрезультатно. Итак, что я сделал сейчас, так это переименовал папку file-repository в file-repo и это исправило. Я хотел бы знать, что происходит, обнаружил ли я ошибку в PHP (маловероятно, поскольку она работала до вчерашнего дня) или моя установка PHP была каким-то образом скомпрометирована. 01.09.2011
  • Извините, ударьте по этому. Переименование папки не помогло. 01.09.2011
  • Я понял. Не удалось переместить файл, поскольку папки, указанной в $_REQUEST['folder'], не было! Почему PHP выдал это раздражающее сообщение об ошибке с пропущенным file-repository битом, мне не понятно. Я склонен думать, что это ошибка PHP. 01.09.2011
  • Последнее замечание. Я просто воссоздал предыдущую ситуацию (т.е. удалил папку, указанную в $_REQUEST), чтобы добраться до сути этой ошибки. Затем я получил доступ к скрипту загрузки через простую форму загрузки html-файла и заметил, что стандартный почтовый вызов скрипта выдает правильное сообщение об ошибке PHP. До сих пор я просматривал ответ сценария через Firebug (поскольку Uploadify отправляет информацию через Ajax), и именно здесь появилось искаженное сообщение об ошибке. Таким образом, кажется, что это не ошибка PHP, а Firebug испортил вывод скрипта. Так что заметьте себе... не слишком доверяйте Firebug. 01.09.2011

Ответы:


1

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

'/[^a-zA-Z0-9-_.]/' should be '/[^a-zA-Z0-9_.-]/'
01.09.2011
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


© 2024 wedx.ru, WedX - журнал о программировании и компьютерных науках
Для любых предложений по сайту: [email protected]