Как отправить файл с curl без использования формы?

1

Я работаю над проектом, в котором я использую два отдельных сервера: один для разработки и один для видимой версии. Вот как работает этот процесс и где у меня проблемы: каждое утро я запускаю некоторые макросы VBA, которые собирают данные, компилирует эти данные (в основном файлы.xlsx) и отправляет их на сервер разработки через FTP. Видимый сервер должен использовать эти данные для отображения информации и т.д., Но FTP заблокирован на этом сервере.

Из-за этого мне нужно каждое утро копировать все с моего сервера разработки на видимый сервер, чтобы данные на видимом сервере обновлялись, и я хотел бы автоматизировать это.

Я попытался отправить данные из макросов VBA непосредственно на видимый сервер через HTTP-запросы (точнее, WinHTTPRequest), но это не сработало.

Я искал в Интернете и обнаружил, что cURL может отправлять HTTP-запросы через PHP, и я хотел бы использовать это решение, если это возможно, вот мой текущий код:

send.php:

<?php
    $request = curl_init('mysite/receive.php');
    curl_setopt($request, CURLOPT_POST, true);
    curl_setopt($request, 
    CURLOPT_POSTFIELDS, 
    array(
        'file' => '@MyFileRealPath.xlsx;filename=file'
    ));

    curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
    echo curl_exec($request);

    curl_close($request);
?>

receive.php:

<?php
    var_dump($_FILES);
?>

Когда я запускаю send.php, я получаю:

array(0) { } 

Таким образом, файл receive.php не получает никакого файла, кто-то знает, как это исправить?

Если то, что я пытаюсь сделать, невозможно, кто-то знает какой-либо другой способ, которым я мог бы попытаться отправить файлы с сервера разработки на видимый?

Спасибо и извините за мой неподдельный английский, я не носитель языка.

Хорошего дня!

Показать ещё 4 комментария
Теги:
curl
http

1 ответ

0

Сегодня у меня было что-то подобное, когда наш сервер внезапно не отправил файл за завиток. Я обнаружил, что версия PHP была обновлена. По-видимому, в предыдущей версии был введен новый параметр curl (CURLOPT_SAFE_UPLOAD), который отключает использование символа @для загрузки файлов, а "PHP 5.6.0 изменяет значение по умолчанию на TRUE".

Я думаю, вам нужно добавить этот параметр с помощью curl_setopt и отключить его, например:

$request = curl_init('mysite/receive.php');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($request, 
CURLOPT_POSTFIELDS, 
array(
    'file' => '@MyFileRealPath.xlsx;filename=file'
));

curl_setopt($request, CURLOPT_RETURNTRANSFER, true);

Кроме того, вы можете использовать CurlFile:

$request = curl_init('mysite/receive.php');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, 
CURLOPT_POSTFIELDS, 
array(
    'file' => new CurlFile('MyFileRealPath.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
));
  • 0
    CurlFile рекомендуется поверх @file , поэтому сначала попробуйте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню