WordPress — PHP загрузить и отправить файл с CURL

Я пытаюсь загрузить файл в установку WordPress, а затем отправить его вместе с другими данными из других полей формы в Рычаг API.

Я могу отправлять данные в конечную точку просто отлично, но не так сильно при загрузке файлов. Следующее действительно выполняет загрузку в wp-content / uploads, но я думаю, что проблема заключается либо в следующей строке move_uploaded_file или где я передаю его в $data массив.


<form enctype="multipart/form-data" method="post" action="<?php echo get_template_directory_uri(); ?>/jobForm.php">
<input type="file" name="resume">
<button type="submit">Submit</button>
</form>

<?php
// URL
$url = "https://api.lever.co/v0/postings/XXXX/XXXXXX";

$name = $_POST["name"];
$email = $_POST["email"];
$urls = $_POST["urls"];

$target = "/www/wp-content/uploads/" . basename($_FILES["resume"]["name"]);

move_uploaded_file($_FILES["resume"]["tmp_name"], $target);

// data
$data = array(
"name" => $name,
"email" => $email,
"urls" => $urls,
"resume" => @$_FILES["resume"]
);

// initiate curl instance, set options, and post
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // url
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // full data to post
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return results as a string instead of outputting directly

echo $data["resume"];
// $output
$output = curl_exec($ch);
var_dump($output);

// close curl resource to free up system resources
curl_close($ch);
?>

Я пытался использовать $target переменная для "resume" $data значение, но это тоже не сработало. Как вы, вероятно, можете сказать, я не совсем уверен, где это идет не так (я разработчик внешнего интерфейса из моего элемента: D).

Вторя $data["resume"] дает массив, повторяя $target дает местоположение + имя файла, как и ожидалось. Я думаю, я не уверен какие Мне нужно пройти через в $data массив … Есть идеи, что я здесь делаю не так? Если это помогает, я не получаю ошибку от Lever при отправке. На самом деле, он возвращает сообщение 200 OK и отправляет сообщения просто отлично, просто без поля резюме!

0

Решение

Вы можете сделать это так

$localFile = $_FILES[$fileKey]['tmp_name'];

$fp = fopen($localFile, 'r');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'someurl' . $strFileName); //$strFileName is obvious
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 86400);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'CURL_callback');
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localFile));
curl_exec ($ch);

if (curl_errno($ch)) {

$msg = curl_error($ch);
}
else {

$msg = 'File uploaded successfully.';
}

curl_close ($ch);

$return = array('msg' => $msg);

echo json_encode($return);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]