API, который я пытаюсь реализовать, требует загрузки файла XML, содержащего команды.
Простой способ сделать это - сгенерировать содержимое файла, записать его в файловую систему и загрузить с помощью curl на веб-сервер.
То, что я пытаюсь сделать, это пропустить часть записи, используя обработчик временного протокола php. Пример кода следующий:
<?php
$fp = fopen("php://temp", "r+");
$request = 'some xml here';
fwrite($fp, $request);
rewind($fp);
$input_stat = fstat($fp);
$size = $input_stat['size'];
$url = "http://example.com/script.php";
$ch = curl_init();
$filename = $_POST[cert_file] ;
$data['file'] = "@xml.xml";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_setopt($ch,CURLOPT_INFILESIZE,$size);
curl_setopt($ch,CURLOPT_INFILE,$fp);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
$error = curl_error($ch);
echo 'result:'.$result."\n";
echo 'error:'.$error."\n";
curl_close($ch);
?>
К сожалению, это не работает. Tcpdump показывает, что запрос не отправляется.
Обновление : Результат, который я получаю:
результат:
ошибка: не удалось создать промежуточные данные
У кого-нибудь есть подсказка, как загрузить текст в виде файла на лету с помощью PHP?