Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > функция copy


Автор: СЭНСЭЙ 4.2.2010, 12:20
простой код:
Код

<?php
#  phpinfo();
copy("D:\www\root\phpshop8\images\shop\product\69390335_1.jpg", "D:\www\root\phpshop8\images\shop\product\0dc4fd9ca1cbe757b049d0acfa27c484.jpg");
?>


пишет ошибку на странице:
Warning: copy(D:\www oot\phpshop8\images\shop\product9390335_1.jpg) [function.copy]: failed to open stream: Invalid argument in D:\www\root\test.php on line 3

подскажите что не так

Автор: Ипатьев 4.2.2010, 12:21
кавычки поменять на одинарные

Автор: СЭНСЭЙ 4.2.2010, 12:37
Помогло. Спасибо!
А не подскажете почему так получается?
В учебнике таких нюансов описано не было.

Автор: sTa1kEr 4.2.2010, 12:57
http://php.net/types.string

Автор: patap 4.2.2010, 13:06
почитай про http://php.su/learnphp/datatypes/?string в php

так как строка в двойных кавычках,  PHP распознал последовательность \6 как спецсимвол, что и вызвало варнинг.
тоже самое если бы у тебя вдруг в пути оказалась последовательность \n то это было бы воспринято не как простой текст, а как перевод строки.

Автор: Ипатьев 4.2.2010, 13:45
Варнинг вызвало совсем не это.
В сообщении об ошибке ничего про символы не было.
Тем более, что спецсимвол там был не один.

Автор: СЭНСЭЙ 4.2.2010, 13:46
спасибо sTa1kEr.

ага, спасибо ратар

но на самом деле
у меня была такая строка 
Код

 $d["image_commands"] .= "\$ret = unlink(\"$path$curr_file\");";

 и я ее исправил на 
Код

 $d["image_commands"] .= "\$ret = unlink('$path$curr_file');";


проблема решилась
как видите тут было преобразование посложнее но наверное был тот же самый механизм образования ошибки

Автор: Ипатьев 4.2.2010, 13:55
Если все именно так, то дело совсем плохо.

Автор: СЭНСЭЙ 4.2.2010, 14:11
ипатьев, а можно аргументированно?

Автор: Ипатьев 4.2.2010, 14:15
Да что там аргументировать? 
Если в сообщении об ошибке мы видим своими словами слово copy, а в коде - видим  unlink, да еще и генерацию РНР кода, то есть, сайт простоит невзломанным ровно до тех пор, пока кому-то не захочется его взломать

Автор: bars80080 4.2.2010, 14:21
собирать код для исполнения, а затем исполнять, в то время как его можно просто исполнить, всегда плохо.

всё равно что писать ручкой, удерживая её двумя палочками

/проще говоря, через одно место/

проблемы у вас впереди будут только множится

Автор: СЭНСЭЙ 4.2.2010, 16:13
ипатьев, помоему в теме ничего о проблеме защиты не сказано. Зачем засорять тему попытками поумничать.

bars80080 ну если вы знаете как грамотнее организовать код то можете привести пример
я ведь тоже могу сказать вам что нибудь далекое от сути вопроса и добавить при этом что вы полный ламмер
это ничего общего с конструктивом не имеет

Автор: Ипатьев 4.2.2010, 16:19
Я думаю, что не стоит разговаривать в таком тоне.

Автор: bars80080 4.2.2010, 17:04
СЭНСЭЙ, не вижу в своём посте слово "ламмер", сказал только то что имел в виду.

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

Автор: СЭНСЭЙ 4.2.2010, 17:15


 ! 
nerezus
Его ответы были здесь по теме, а флудишь и оскорбляешь здесь сейчас ты. Предупреждаю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)