Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите разобраться с формой отправки файлов..
Форумы портала PHP.SU » PHP » Программирование на PHP » Помогите разобраться с формой отправки файлов..

Страниц (2): [1] 2 »
 

1. relight - 06 Апреля, 2011 - 12:16:11 - перейти к сообщению
Здравствуйте! не могу понять почему скрипт не работает! его я взял из учебника..
При отправке файла выдает "Ошибка"..
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. if (isset($_FILES['file_name'])){
  4.     if ($_FILES['file_name']['error'] == 0 &&
  5.     $_FILES['file_name']['size'] > 0) {
  6.         $path = "C:\\Server\\Аpache 2\\htdocs\\";
  7.         $path .= basename($_FILES['file_name']['name']);
  8.         if (@move_uploaded_file($_FILES['file_name']['tmp_name'], $path)){
  9.             echo('Файл успешно загружен');
  10.         }
  11.         else {
  12.             echo("Ошибка");
  13.         }
  14.        
  15.     }
  16.     echo("Ошибка");
  17.            
  18. }
  19. ?>
  20.  
2. Мелкий - 06 Апреля, 2011 - 12:48:49 - перейти к сообщению
phpfaq.ru/debug Что ещё можно сказать...
3. relight - 06 Апреля, 2011 - 13:08:21 - перейти к сообщению
посмотрел массив $_FILES
показало Array ( [file_name] => Array ( [name] => a_6d384b2a.jpg [type] => image/jpeg [tmp_name] => C:\Server\php\tmp\php6A84.tmp [error] => 0 [size] => 19102 ) )

[error]=>0, ошибок нет, что тогда может быть?
4. Zuldek - 06 Апреля, 2011 - 13:15:07 - перейти к сообщению
Цитата:
C:\\Server\\Аpache 2\\htdocs\\
нестандартная запись пути Улыбка
5. Мелкий - 06 Апреля, 2011 - 13:18:10 - перейти к сообщению
Читайте статью ещё раз. Обратите внимание на "быстрые рекомендации" п.1 и строку 8 вашего скрипта.
(Добавление)
Zuldek пишет:
нестандартная запись пути

Если на хосте:
0) винда
1) указанный путь существует
2) веб-сервер туда может писать
То будет работать. Винды в качестве разделителя пути используют как / так и \, но последний необходимо экранировать, т.к. это спецсимвол в PHP.
6. relight - 06 Апреля, 2011 - 13:31:03 - перейти к сообщению
убрал @ в 8 строке, и написал в начале скрипта


вывело:

Warning: move_uploaded_file( C:\Server\Аpache 2\htdocs\ x_94cf59dc.jpg) [function.move-uploaded-file]: failed to open stream: Invalid argument in C:\Server\Apache 2\htdocs\file.php on line 8

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\Server\php\tmp\phpC69C.tmp' to ' C:\Server\Аpache 2\htdocs\ x_94cf59dc.jpg' in C:\Server\Apache 2\htdocs\file.php on line 8


как решить проблему? путь правильный, перепроверил не один раз((
7. Zuldek - 06 Апреля, 2011 - 13:41:43 - перейти к сообщению
relight пишет:
Unable to move 'C:\Server\php\tmp\phpC69C.tmp' to ' C:\Server\Аpache 2\htdocs\ x_94cf59dc.jpg' in C:\Server\Apache 2\htdocs\file.php on line 8
как решить проблему? путь правильный, перепроверил не один раз((

Сервер не хочет класть в \ x_94cf59dc.jpg, я бы тоже не смог Улыбка

upd. Вы пытаетесь скопировать в \ x_94cf59dc.jpg
$path это место куда вы пытаетесь скопировать файл. Выведите эту переменную и станет понятно.
8. relight - 06 Апреля, 2011 - 13:43:52 - перейти к сообщению
Zuldek, не могу понять, что не так сделал(((
9. LIME - 06 Апреля, 2011 - 14:23:38 - перейти к сообщению
скажите а в 7 строке не мог пробел затесаться между
C: \ Server \ Аpache 2 \ htdocs\ и
x _ 94 cf59dc . jpg?
просьба ответить
10. relight - 06 Апреля, 2011 - 20:10:58 - перейти к сообщению
Переписал скрипт используя пример с php.net, добавил проверку с помощью is_uploaded_file..
файл в tmp загружается, а дальше не хочет...(((
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $name = $_FILES["file_name"]["name"];
  4.  
  5. if (is_uploaded_file($_FILES["file_name"]["tmp_name"])) {
  6.    echo "Файл ". $name ." загружен в папку tmp успешно .\n";
  7. } else {
  8.    echo "Ошибка ";
  9.    
  10. }
  11.  
  12.     if ($_FILES["file_name"]["error"] == UPLOAD_ERR_OK) {
  13.         $tmp_name = $_FILES["file_name"]["tmp_name"];
  14.         move_uploaded_file($tmp_name, "C:\Server\Apache 2\htdocs\uploads");
  15.     }
  16.  
  17. ?>
  18.  


результат:

Файл a_6d384b2a.jpg загружен в папку tmp успешно .
Warning: move_uploaded_file() [function.move-uploaded-file]: The second argument to copy() function cannot be a directory in C:\Server\Apache 2\htdocs\file_t.php on line 14

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\Server\php\tmp\php2C2C.tmp' to 'C:\Server\Apache 2\htdocs\uploads' in C:\Server\Apache 2\htdocs\file_t.php on line 14

помогите исправить ошибку.
11. DeepVarvar - 06 Апреля, 2011 - 20:14:50 - перейти к сообщению
relight у вас php как CLI/CGI??? Или как модуль Apache?
Если второе, то указывайте относительный путь от корневой папки сайта. И не обратными слешами, а прямыми.
$path = "/uploads/";
Если не сработает - проверить права на каталог.
12. relight - 06 Апреля, 2011 - 20:38:07 - перейти к сообщению
DeepVarvar, как узнать CLI/CGI или модуль?

Поменял путь на /uploads/ ошибку не выдает, но и файл не появляется..
если заношу путь в переменную, то в каталоге htdocs создается файл с именем переменной.
13. Мелкий - 06 Апреля, 2011 - 21:03:41 - перейти к сообщению
relight,
relight пишет:
The second argument to copy() function cannot be a directory

Переведите, что вам сказал скрипт и почитайте что требует move_uploaded_file вторым аргументом.

PS: странно, я думал \ в путях надо экранировать.

relight пишет:
Поменял путь на /uploads/ ошибку не выдает, но и файл не появляется..

Теперь осталось найти, где под виндами /.
Почитайте про относительные, абсолютные, виндовые и никсовые пути, пригодится.
14. relight - 06 Апреля, 2011 - 21:18:18 - перейти к сообщению
Всем спасибо большое! все получилось!
поменял

файл загружается в папку htdocs, а как теперь сделать чтоб он загружался в uploads которая находится в htdocs?
вот мой код

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. ini_set('display_errors',1);
  4. error_reporting(E_ALL ^E_NOTICE);
  5. if (isset($_FILES["file_name"])){
  6.     if ($_FILES["file_name"]["error"] == 0) {
  7.         $path = '/uploads/';
  8.         $name = $_FILES["file_name"]["name"];
  9.         $tmp_name = $_FILES["file_name"]["tmp_name"];
  10.         //$path .=basename($_FILES['file_name']['name']);
  11.        
  12.   if (move_uploaded_file($tmp_name,$name))
  13. {
  14.           echo('Файл успешно загружен');
  15.         }
  16.         else {
  17.             echo("Ошибка");
  18.         }
  19.        
  20.     }
  21.     echo("Ошибка");
  22.  
  23.            
  24. }
  25.  
  26. ?>
  27.  
15. DeepVarvar - 07 Апреля, 2011 - 00:20:09 - перейти к сообщению
Я вообще не понимаю - зачем весь этот гемор?
Искать какие-то пути, пусть сам пых думает...
PHP:
скопировать код в буфер обмена
  1. if (isset($_FILES['file']['tmp_name']) and $_FILES['file']['type'] == "text/plain") {
  2.     $filename = "текстовое_файло";
  3.     if (@copy($_FILES['file']['tmp_name'],"./uploads/".$filename.".txt")) {
  4.         unset($_FILES['file']);
  5.         echo "усё путём шеф";
  6.         }
  7.     else echo "нет прав на запись в каталог";
  8.     }

 

Powered by ExBB FM 1.0 RC1