непредсказуемая функция copy() PHP

vorona
На сайте с 31.01.2010
Offline
91
4805

На локалке (Виндовс+ТопСервер) скрипт работает отлично. Всё копируется нормально.

А вот на VDS (Debian 5) не хочет. Копирует непонятно что и как. В результате в папке появляется файл с половиной имени, что должно быть, его нельзя удалить, нельзя переименовать.

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

Подскажите, в чем может быть проблема?

vorona добавил 03.02.2011 в 22:47

При попытке залить нормальный файл:

Unexpected directory listing line ' Davies'.

Invalid rights description 'Davies'

Ну и сам код:

copy ($_SERVER[DOCUMENT_ROOT]."/img/p1/".$_POST['photo'], $_SERVER[DOCUMENT_ROOT]."/img/p2/".$rowx[2].".jpg") or die ("Ошибка копирования");

vorona добавил 03.02.2011 в 22:54

$_POST['photo'] состоит из номера изображения. Например, 15.jpg.

$rowx[2] состоит из имени и фамилии. Например, Coco Chanelle.

AGIVEO (http://agiveo.net/) - бесплатная браузерная многопользовательская онлайн игра в жанре футбольного менеджера =)
xpycteamset
На сайте с 05.10.2009
Offline
129
#1

боюсь предположить что может с правами на папке не все в порядке?

vorona
На сайте с 31.01.2010
Offline
91
#2
xpycteamset:
боюсь предположить что может с правами на папке не все в порядке?

0777

Уже и так пробывал:


$file = $_SERVER[DOCUMENT_ROOT].'/img/p1/'.$_POST['photo'];
$dir = $_SERVER[DOCUMENT_ROOT].'/img/p2/';
$name = 'file.jpg'

copy($file, $dir.basename($name));
kil
На сайте с 03.04.2006
Offline
84
kil
#3

файл с половиной имени - это как?

Права на файл какие в итоге выставляются?

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#4

У меня такое ощущение, что пробел не правильно обрабатывается.

Попробуйте заменить пробелы на "_" в имени файла и папки

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
zhitov
На сайте с 30.01.2005
Offline
219
#5
vorona:
$_POST['photo'] состоит из номера изображения. Например, 15.jpg.
$rowx[2] состоит из имени и фамилии. Например, Coco Chanelle.

Половина имени, это Chanelle.jpg? Может, дело в пробелах в именах файлов?

Строительные калькуляторы ( https://www.zhitov.com/ )
vorona
На сайте с 31.01.2010
Offline
91
#6
kil:
файл с половиной имени - это как?

Права на файл какие в итоге выставляются?

Имя: Coco Chanelle.jpg

Записывает: Сосо или же набор непонятных символов

vorona добавил 04.02.2011 в 07:31

№5, 6, нужно именно так :(

VF
На сайте с 26.01.2002
Offline
113
VF
#7

Вместо " " передавать "\ " не пробовали?

L
На сайте с 07.12.2007
Offline
351
#8
vorona:
Имя: Coco Chanelle.jpg

Подумайте как может выполниться команда:

copy 15.jpg Coco Chanelle.jpg

Пробелы в именах файлов допустимы (в некоторых ОС), но их придётся специально обрабатывать, или заключать имена файлов в "".

А когда будете выводить картинку с таким именем (Coco Chanelle.jpg) на сайт - столкнетесь со второй проблемой - пробелы в url недопустимы и их надо кодировать в %20.

Иногда Веб-сервер сам их кодирует, иногда - нет, в некоторых случаях некодированные пробелы сработают, в некоторых - нет.

Зря вы стали юзать некошерные символы в именах файлов.

vorona
На сайте с 31.01.2010
Offline
91
#9
Ladycharm:
Подумайте как может выполниться команда:
copy 15.jpg Coco Chanelle.jpg

Пробелы в именах файлов допустимы (в некоторых ОС), но их придётся специально обрабатывать, или заключать имена файлов в "".

А когда будете выводить картинку с таким именем (Coco Chanelle.jpg) на сайт - столкнетесь со второй проблемой - пробелы в url недопустимы и их надо кодировать в %20.

Иногда Веб-сервер сам их кодирует, иногда - нет, в некоторых случаях некодированные пробелы сработают, в некоторых - нет.

Зря вы стали юзать некошерные символы в именах файлов.

Я заменяю пробел на %20 при создании нового файла.

L
На сайте с 07.12.2007
Offline
351
#10
vorona:
Я заменяю пробел на %20 при создании нового файла.

А Вы принтаните что выводится: $_SERVER[DOCUMENT_ROOT]."/img/p1/".$_POST['photo'], $_SERVER[DOCUMENT_ROOT]."/img/p2/".$rowx[2].".jpg" и руками вбейте в коммандную строку "copy...".

Так проще найти, где собака порылась.

PS: А такое что у Вас $_POST['photo']? Если удаленно загружаете файл, надо использовать move_uploaded_file() и массив $_FILES[...]['tmp_name'], потому что имя загруженного файла будет другое.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий