Отправка файла на веб-сайт с использованием PHP?

#php #forms #file-upload

#php #формы #загрузка файла

Вопрос:

Итак, я хотел отправить изображение на следующий веб-сайт (http://newocr.com /) но я понятия не имею, как это сделать. Я ничего не могу найти в Google.

Вот код, который я использую

 $url = "http://newocr.com/";
$urlref = "http://newocr.com/";
$ch = curl_init();

$data_array["userfile"] =  $imgpath;
$data_array["url"]  =  '';
$data_array["1"] = 'eng';
$data_array["preview"] ='1';

  if(is_array($data_array))
    {
    # Convert data array into a query string (ie animal=dogamp;sport=baseball)
    foreach ($data_array as $key => $value) 
        {
        if(strlen(trim($value))>0)
            $temp_string[] = $key . "=" . urlencode($value);
        else
            $temp_string[] = $key;
        }
    $query_string = join('amp;', $temp_string);
    }

    if(isset($query_string))
        curl_setopt ($ch, CURLOPT_POSTFIELDS, $query_string);
        curl_setopt ($ch, CURLOPT_POST, TRUE); 
        curl_setopt ($ch, CURLOPT_HTTPGET, FALSE); 

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $urlref);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$return = curl_exec($ch);

echo $return;
 

Переменная $ imgpath указывает, где файл хранится на моем жестком диске, но
файл не загружается с моего жесткого диска на веб-сайт. Но когда я делаю то же самое, используя URL-адрес файла, хранящегося на моем веб-хостинге, вместо пути к файлу на ПК, это работает.

Итак, кто-нибудь может сказать мне, как это сделать. Как я могу загрузить этот файл непосредственно со своего жесткого диска вместо использования URL?

Спасибо

Комментарии:

1. url Параметр ожидает общедоступный URL-адрес, к которому может получить доступ удаленный сервер. Ввод имени файла не будет работать, поскольку удаленный сервер не может загрузить файл.

2. это была опечатка, я ее исправил, пожалуйста, прочтите еще раз

Ответ №1:

Примечание: весь ваш цикл foreach бессмыслен. curl с радостью примет массив для POSTFIELDS opt и автоматически выполнит все это построение / кодирование url для вас.

Чтобы заставить curl выполнить загрузку, вы должны сообщить ему, что передаете путь к файлу:

 $opts = array(
  'foo' => 'bar',
  'file' => '@/path/to/file/on/server'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $opts);
 

Обратите внимание на @ в массиве — это подсказка для curl, что это путь к файлу, и вы хотите, чтобы он был загружен. Также обратите внимание на полное отсутствие зацикливания / ручного кодирования / построения URL.

Также обратите внимание, что в более поздних реализациях curl / php это было обновлено до выделенной опции CURLFile.

Комментарии:

1. хорошо, можете ли вы сказать, как мне указать путь, по которому он находится в том же каталоге, что и скрипт

2. извините, но если вы не можете определить путь к файлу, тогда вам не следует начинать с программирования.

3. на самом деле я только начал, я не нашел ничего общего с путем к файлу, поэтому