2012-06-27 1 views
4

Я собираюсь преобразовать файл с помощью php и отправить его как часть запроса HTTP POST. Существует часть моего кода:PHP - преобразовать файл в двоичный файл и отправить его с помощью HTTP POST

 $context = stream_context_create(array(
     'http' => array(
      'method' => 'POST', 
      'header' => "Content-type: " . $this->contentType."", 
      'content' => "file=".$file 
     ) 
      )); 
    $data = file_get_contents($this->url, false, $context); 

ли переменная $file должна быть байты представления файла, который я хочу отправить?

И это правильный способ отправить файл в php без использования формы? У вас есть какие-то подсказки?

Также как преобразовать файл в представление байтов с помощью PHP?

+0

Можете ли вы уточнить, что вы имеете в виду при преобразовании в двоичный? и какие файлы у вас есть? – Leri

+0

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

+1

Вы можете напрямую отправлять XML-файлы. CURL отлично подходит для этого. – Leri

ответ

2

Вы можете найти его гораздо проще использовать CURL, например:

function curlPost($url,$file) { 
    $ch = curl_init(); 
    if (!is_resource($ch)) return false; 
    curl_setopt($ch , CURLOPT_SSL_VERIFYPEER , 0); 
    curl_setopt($ch , CURLOPT_FOLLOWLOCATION , 0); 
    curl_setopt($ch , CURLOPT_URL , $url); 
    curl_setopt($ch , CURLOPT_POST , 1); 
    curl_setopt($ch , CURLOPT_POSTFIELDS , '@' . $file); 
    curl_setopt($ch , CURLOPT_RETURNTRANSFER , 1); 
    curl_setopt($ch , CURLOPT_VERBOSE , 0); 
    $response = curl_exec($ch); 
    curl_close($ch); 
    return $response; 
} 

Где $ URL, где вы хотите, чтобы отправлять сообщения и $ файла путь к файлу, который вы хотите отправить.

+0

Хорошо, это правда. Но что, если мое ограничение в том, что php-сервер, который я хочу сделать, не имеет установленного расширения curl? – Mirek

1

Как ни странно, я просто написал статью и проиллюстрировал этот же сценарий. (phpmaster.com/5-inspiring-and-useful-php-snippets). Но, чтобы вы начали, вот код, который должен работать:

<?php 
$context = stream_context_create(array(
     "http" => array(
      "method" => "POST", 
      "header" => "Content-Type: multipart/form-data; boundary=--foo\r\n", 
      "content" => "--foo\r\n" 
       . "Content-Disposition: form-data; name=\"myFile\"; filename=\"image.jpg\"\r\n" 
       . "Content-Type: image/jpeg\r\n\r\n" 
       . file_get_contents("image.jpg") . "\r\n" 
       . "--foo--" 
     ) 
    )); 

    $html = file_get_contents("http://example.com/upload.php", false, $context); 

В подобных ситуациях это помогает сделать макет веб-форму и запустить его через Firefox с поджигатель включена или что-то, а затем проверить запрос, который был отправлен , Оттуда вы можете вывести важные вещи для включения.

+0

Наконец, я использовал curl для отправки файла с данными. Его очень легко установить и использовать. Спасибо всем за подсказки. Существует код, который я использовал: http://blog.derakkilgo.com/2009/06/07/send-a-file-via-post-with-curl-and-php/ – Mirek

Смежные вопросы