Я работаю над проектом, в котором я использую два отдельных сервера: один для разработки и один для видимой версии. Вот как работает этот процесс и где у меня проблемы: каждое утро я запускаю некоторые макросы 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 не получает никакого файла, кто-то знает, как это исправить?
Если то, что я пытаюсь сделать, невозможно, кто-то знает какой-либо другой способ, которым я мог бы попытаться отправить файлы с сервера разработки на видимый?
Спасибо и извините за мой неподдельный английский, я не носитель языка.
Хорошего дня!
Сегодня у меня было что-то подобное, когда наш сервер внезапно не отправил файл за завиток. Я обнаружил, что версия 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');
));
CurlFile
рекомендуется поверх @file
, поэтому сначала попробуйте.
rsync
илиscp
для копирования файлов с одного компьютера на другой, если это возможно