специальные символы в именах файлов / папок в Linux; Функция переименования PHP не работает - PullRequest
0 голосов
/ 03 июня 2010

Я использую функцию Rename () (php) для перемещения некоторых изображений из одной папки в другую.

Папка назначения содержит специальные символы.

Однако, когда я делаю это на сервере, я получаю сообщение об ошибке, что папка с именем не найдена. И в этой ошибке имена папок специальных символов заменяются квадратами:

Warning: rename(../temp_images/668635375_1.jpg,../ad_images/B�tar/thumbs/668635375_1.jpg)
[function.rename]: No such file or directory in /var/www/etc....

Это работает на моей локальной машине, хотя (Windows XP).

Есть идеи? Советы по устранению неполадок?

Спасибо

Ответы [ 2 ]

3 голосов
/ 03 июня 2010

Я предполагаю, что это проблема кодирования в какой-то момент.

Однако использование не-ASCII символов в именах файлов в любом случае является скользким уклоном.

Я всегда рекомендую (поскольку другой пользователь SO дал мне знать об этой великой и простой идее), что если вы можете, urlencode() имена файлов и urldecode() их при обслуживании их для публики. Это даст вам имя файла, состоящее из символов, которые работают в каждой известной мне файловой системе, и может содержать любой символ Unicode.

0 голосов
/ 03 июня 2010

Вероятно, это проблема кодирования: это может быть даже в источнике (в котором кодируются эти «специальные» символы, в источнике php? ...), или где-то еще, или в обоих. Под «где-то еще» я имею в виду, что это может быть правильное кодирование в строке, плохо проанализированное php или правильно проанализированное, но неправильно «переданное» из rename () и нижележащего системного вызова (/ filesystem), который выполняет фактическое переименование .. По моему опыту, плохие вещи могут произойти, если вы используете «специальные» символы для папок / файлов, которые могут быть прочитаны разными системами или доступны через разные API ... Итак: не использовать » специальные "символы в папках / файлах, которые должны быть доступны через сценарий http server / php в системе компьютера, которые могут отличаться от того, который" создал "папку / файл.

Чтение может помочь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...