LINUX.ORG.RU

curl: не загружается файл на сайт

 ,


0

2

На моем сайте есть форма (upload.html):

<html>
<head>
  <title>Download file on server</title>
</head>
<body>
      <h2><p><b> Form for download files </b></p></h2>
      <form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="file" name="filename"><br> 
      <input type="submit" value="Загрузить"><br>
      </form>
</body>
</html>

Код скрипта обработки этой формы (upload.php)

<html>
<head>
  <title>Result file download</title>
</head>
<body>
<?php
   if($_FILES["filename"]["size"] > 1024*3*1024)
   {
     echo ("Размер файла превышает три мегабайта");
     exit;
   }
   // Проверяем загружен ли файл
   if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
   {
     // Если файл загружен успешно, перемещаем его
     // из временной директории в конечную
     move_uploaded_file($_FILES["filename"]["tmp_name"], "./".$_FILES["filename"]["name"]);
	 echo("File  ");
	 echo $_FILES["filename"]["name"];
	 echo("  loaded successfully!");
   } else {
      echo("Error loading file");
   }
?>
</body>
</html>

Через браузер файлы загружаются, но мне необходимо загружать их через bash. Пробую с помощью curl. Прочитал мануал, делаю такой POST запрос:

#!/bin/bash
# файл на локальном компьютере:
FILE=~/rwf/data.txt
# загрузчик на сервере:
REMOTE_SITE=http://мой_сайт/upload.php
echo "отправляем файл $FILE на удаленный ресурс $REMOTE_SITE"
curl -X POST -d @$FILE $REMOTE_SITE
Но файл не закачивается. Выдается сообщение из upload.php «Error loading file».

В чем может быть ошибка? Авторизации на сайте не требуется, права доступа выставлены. То-же самое, (не закачивается) и для локального сервера. Как можно оттрассировать закачку? Прошу помочь, спасибо.



Последнее исправление: Alex_2057 (всего исправлений: 3)

Опечатка

Была опечатка, исправил. Извините. upload.php - скрипт.

Alex_2057
() автор топика

Если скрипт обратывает, показывайте вывод _FILES, может быть он не пустой и там ошибка? Если пустой, то сначала заюзайте FILE с абсолютным путем, и также вывод _FILES, а потом попробуйте

curl -F file=@file site

znenyegvkby
()
Ответ на: комментарий от Alex_2057

Конечно, все правильно. Вы сделайте запрос как сейчас делаете, и дампаните _FILES, если будет пустой массив то будем дальше разбираться.

znenyegvkby
()
Ответ на: комментарий от Alex_2057

Все верно, только что проверил, с -d у меня возвращает пустой массив в _FILES

curl -XPOST -d @"/home/snaik/test/badblocks_sda5" http://test.local/testTest/
array(0) {
}
А с -F и указанием конкретного имени все возвращает как нужно
curl -XPOST -F "filename=@/home/snaik/test/badblocks_sda5" http://test.local/testTest/
array(1) {
  ["filename"]=>
  array(5) {
    ["name"]=>
    string(14) "badblocks_sda5"
    ["type"]=>
    string(24) "application/octet-stream"
    ["tmp_name"]=>
    string(14) "/tmp/php6Z3YHw"
    ["error"]=>
    int(0)
    ["size"]=>
    int(108)
  }
}
Так что все окей, можете смело использовать -F. А я пойду разбираться с -d :)

znenyegvkby
()
Ответ на: комментарий от znenyegvkby

Получилось!

Все работает! Вы сэкономили мне много времени и клеток (нервных). Спасибо!!

Alex_2057
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.