У меня есть такая форма:
<form method="POST" action="i.php" enctype="multipart/form-data"> <input type="text" name="field1"> <input type="text" name="field2"> <input type="file" name="file"> <input type="hidden" name="MAX_FILE_SIZE" value="100000"> <input type="submit"> </form>
На странице у меня уже есть:
$URL = 'http://somewhere.com/catch.php'; $fields = array('field1'=>urlencode($_POST['field1'), 'field2'=>urlencode($_POST['field2')); foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }; rtrim($fields_string,'&'); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$URL); curl_setopt($ch,CURLOPT_POST,count($fields)); curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); $result = curl_exec($ch); curl_close($ch);
Это работает, чтобы опубликовать поля1 и 2 поля. Можно ли каким-либо образом включить файл в этот процесс завитки? Как мне это сделать? Я предполагаю, что мне нужно сделать больше, чем просто кодировать значение файла.
Поэтому, основываясь на ответе SimpleCoders, я обновил следующее:
$URL = 'http://somewhere.com/catch.php'; $fields = array('field1'=>urlencode($_POST['field1'), 'field2'=>urlencode($_POST['field2'), 'files'=>'@'. $_FILES['file']['tmp_name']); foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }; rtrim($fields_string,'&'); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$URL); curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); $result = curl_exec($ch); curl_close($ch);
который отправляет OK, но тогда мой результирующий массив $ _FILES на catch.php пуст. В соответствии с примером № 2 на http://www.php.net/manual/en/function.curl-setopt.php Это должно сработать.
Я делаю это на двух разных доменах … может быть, это проблема?