Как загрузить файл на другой сервер в Slim3 PHP
Я использую silm3 в качестве моей инфраструктуры REST API и следовал этому, чтобы написать скрипт загрузки файлов из API.
В настоящее время я запускаю свое веб-приложение на a.xyz.com, а мой REST API - на b.xyz.com . Теперь я хочу загрузить изображение в a.xyz.com/uploaded/ с сайта b.xyz.com/upload.
$newfile->moveTo("/path/to/$uploadFileName");
используется для сохранения файла в текущем поддомене. Но мне не удалось загрузить его в другой поддомен.
Я ищу в Интернете, но не нашел ни малейшего понятия, как это сделать.
2 ответа
Переместив файл на b.xyz.com в правильное положение, сделайте следующее:
// Server B
// Move file to correct position on B
$newfile->moveTo("/path/to/$uploadFileName");
// Send file to A
$request = curl_init('a.xyz.com/upload');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, [
'file' => new CURLFile("/path/to/$uploadFileName")
]);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
curl_close($request);
Затем a.xyz.com должен принять файл и приступить к его сохранению. При использовании Slim, так же, как b.xyz.com делает
...
$newfile->moveTo("/path/to/$uploadFileName");
или используя основные функции PHP
// Server A
if ( !empty($_FILES["file"]) && !empty($_FILES["file"]["tmp_name"]) ) {
// Move file to correct position on A
$uploadFileName = basename($_FILES["file"]["name"]);
move_uploaded_file($_FILES["file"]["tmp_name"], "/path/to/$uploadFileName");
}
Обычно домены или субдомены ограничены собственным веб-пространством, поэтому вы не можете читать или записывать файлы другого домена. Настройка называется open_basedir.
Вы должны установить его в своей конфигурации vhost, но есть и другие способы, такие как установка его с помощью файла.htacces, если ваш хостер позволяет это: Как я могу ослабить ограничение PHP open_basedir?