Здравствуйте, знатоки. У меня возникла проблема с копированием файлов, все работает нормально, но только до того момента, пока я не пробую копировать в папку с пробелом в названии. Код (PHP): if ($_POST['album']) { //$_POST['album'] - имя папки, куда копировать preg_match('/\.([a-zA-Z]+?)$/', $_POST['photo'], $matches); if(in_array(strtolower($matches[1]), $accepted)) { $movedfilename = md5_file($_POST['photo']); // $_POST['photo'] - полный путь до исходного файла $source = "$_POST[photo]"; // исходный путь картинки $sourcet = "$_POST[thumb]"; // исходный путь миниатюры $dest = "$userdata[user_id]/".$_POST[album]."/$movedfilename.$matches[1]"; // конечный путь картинки (здесь путь: ID_юзера/название_альбома/название_файла.расширение) $destt = "$userdata[user_id]/".$_POST[album]."/thumbnails/$movedfilename"."Thumb".".$matches[1]"; // конечный путь миниатюры (здесь путь: ID_юзера/название_альбома/название_файлаThumb.расширение) if ("$source" == "$dest") { echo 'Вы перемещаете файл в то же место, откуда взяли'; die();} if ("$sourcet" == "$destt") { echo 'Вы перемещаете файл миниатюры в то же место, откуда взяли'; die();} if(!copy($source, $dest)) echo 'Не удалось переместить изображение'; if(!copy($sourcet, $destt)) echo 'Не удалось переместить миниатюру'; $status = @unlink($_POST['photo']) or exit("Невозможно удалить картинку, скорее всего ее не существует"); $statust = @unlink($_POST['thumb']) or exit("Невозможно удалить миниатюру, скорее всего ее не существует"); header("Location: myimages.php"); } } Если мой альбом называется "ТЕСТ", то все окей, если же я назову альбом "ТЕСТ ТЕСТ", то в эту папку копирование не происходит, причем нет никаких ошибок, скрипт выполняется полностью вплоть до последней строки с редиректом. upd. p.s. мда, конечно, огорчает код без подсветки синтаксиса upd2. спасибо, нашлась подсветка
я думал, что из кода, где пути написаны с использованием "/", будет понятно, что виндой тут не пахнет то есть? во время создания папки на сервере? или в скрипте копирования? я не совсем понял реализации
я с виндой не работал на пхп. но мне что-то кажется, что виндовые слеши на линухе не пашут, а линуховые на винде пашут, вот... все равно попробуй кавычки =)
если вы имели в виду сделать так: Код (PHP): if(!copy("$source", "$dest")) ...многобукав... результат тот же. Мне что-то подсказывает, что я вас не понимаю.
Ни один из предложенных вариантов не помогает, результат все тот же... Особенная надежда появилась, когда увидел Код (PHP): $dest = str_replace(' ', '%20', $dest); но увы... Добавлено спустя 27 минут 23 секунды: Сразу прошу прощения за отдельный пост, а не совмещение. Вообщем, проблема решена. Кому-то ошибка может показаться глупой, но все-таки она имела место и, думаю, найдутся люди, кому будет интересно что делать в подобной ситуации. Косяк был не в самом скрипте копирования, там я все оставил без изменений, как в первом посте. Проблема была тут: Код (PHP): 1. $alb = mysql_query("SELECT name FROM albums WHERE userid = $userdata[user_id]"); 2. while ($row = mysql_fetch_assoc($alb)) { 3. $album = $row['name']; 4. print ("<option value=$album>$album</option>"); 5. } А именно в 4 строке. Я случайно обратил внимание на то, что в результате value=test вместо value=test test. Чтобы было правильно, нужно писать Код (PHP): 4. print ("<option value='".$album."'>$album</option>");
ну да, я уже потом подумал, что в базе надо было создавать еще поле alb_id, но раз уж все решилось так, то лучше пусть будет как есть, меньше полей, наверное, к лучшему