як завантажити файл за допомогою curl з php [закрито]


78

Я хочу знати, як завантажити файл за допомогою cURL або будь-чого іншого в PHP. Я шукав у google багато разів, але результатів немає.

Іншими словами, користувач бачить на формі кнопку завантаження файлу, форма розміщується на моєму php-сценарії, тоді мій php-скрипт повинен повторно розмістити його на іншому сценарії (наприклад, на іншому сервері).

У мене є цей код, щоб отримати файл і завантажити його

код:

echo"".$_FILES['userfile']."";
$uploaddir = './';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if ( isset($_FILES["userfile"]) ) {
    echo '<p><font color="#00FF00" size="7">Uploaded</font></p>';
    if (move_uploaded_file
($_FILES["userfile"]["tmp_name"], $uploadfile))
echo $uploadfile;
    else echo '<p><font color="#FF0000" size="7">Failed</font></p>';
}

Я хочу, щоб код надіслав файл у файл одержувача.


5
не з "ftp", я хочу надіслати файл із завивкою в $ _FILES ['userfile']
Hadidi44

Ммм ... що тепер? Куди ви хочете його відправити? Яка ваша цільова система?
До Хельге

до php-файлу (джерело, про яке йдеться) - цільовою системою є linux
Hadidi44 04.03.13

Відповіді:


154

Використання:

if (function_exists('curl_file_create')) { // php 5.5+
  $cFile = curl_file_create($file_name_with_full_path);
} else { // 
  $cFile = '@' . realpath($file_name_with_full_path);
}
$post = array('extra_info' => '123456','file_contents'=> $cFile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result=curl_exec ($ch);
curl_close ($ch);

Ви також можете звернутися:

http://blog.derakkilgo.com/2009/06/07/send-a-file-via-post-with-curl-and-php/

Важлива підказка для PHP 5.5+:

Тепер ми повинні використовувати https://wiki.php.net/rfc/curl-file-upload, але якщо ви все ще хочете використовувати цей застарілий підхід, вам потрібно встановитиcurl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);


8
Можливо, це кращий спосіб використовувати вбудовану функцію з curl: php.net/manual/es/function.curl-file-create.php . Звичайно, ви можете скористатися способом POSTFIELDS і заповнити значення, що передує @. У будь-якому випадку, asnwer копіюється із власного використання curl з блогу. Правильна відповідь - це те, що @символ char визначає його як файл, а не як var. $ post міститиме @filename.jpgприклад.
m3nda

2
@ erm3nda Це лише PHP 5.5+.
Джеремі Логан,

9
@fiXedd im наразі використовує php 5.6, і використання curl_file_createнеобхідне (рішення, надане karthik, не працює). Тож код слід оновити приблизно до такого:if function_exists('curl_file_create')) { $cFile = curl_file_create($dest); } else { $cFile = '@' . realpath($dest); }
Марек Рой

2
Для чого extra_info => 123456використовується?
Aaron Gillion

1
це рішення перестало працювати в php 5.6, рішення полягає в додаванні файлу як: new CURLFile (realpath ($ fileName));
Міхал Фрас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.