$username_ftp = "user";
$password_ftp = "password";
$file_name = "remote-transfer.txt";
$url = "example.biz/test/" . $file_name;
$hostname = "ftp://$username_ftp:$password_ftp@$url";
$content = file_get_contents('index.html');
$options = array('ftp' => array('overwrite' => true));
$stream = stream_context_create($options);
file_put_contents($hostname, $content, 0, $stream);
Я пытаюсь поместить файл с моего удаленного сервера на другой удаленный сервер
в то время как я вытесняю этот код с моего локального хоста, он работает, и я передаю файл с моего компьютера ocal на сервер.
Но когда я пытаюсь удалить этот код с моего сервера AWS, он не передает никакого файла, когда я проверяю свой файл журнала ошибок, он дает
PHP Warning: file_put_contents(): connect() failed: Permission denied
PHP Warning: file_put_contents(ftp://[email protected]/remote-transfer.txt): failed to open stream: operation failed in
мой тестовое задание разрешение папки 777
Теперь, что делать, есть ли какая-либо конфигурация сервера, которую нельзя делать.
Я думаю, что проблема с вашим $hostname
попробуйте это с: (Я пробовал это решение с моим экземпляром ec2 и он работает.)
<?php
/* set the FTP hostname */
$user = "test";
$pass = "myFTP";
$host = "example.com";
//path of file
$file = "test.txt";
$hostname = $user . ":" . $pass . "@" . $host . "/" . $file;
/* the file content */
$content = "this is just a test.";
/* create a stream context telling PHP to overwrite the file */
$options = array('ftp' => array('overwrite' => true));
$stream = stream_context_create($options);
/* and finally, put the contents */
file_put_contents($hostname, $content, 0, $stream);
?>
источник: PHP: file_put_contents — Руководство
Вам нужно проверить привилегии с обоих концов:
Сначала ваш сервер AWS (ваша текущая папка тестирования) должен быть общедоступным для всех операций 777 (я думаю, что вы уже выполнили), а используемые учетные данные должны иметь все привилегии для доступа ко всем файлам.
Примечание: ранее у меня была проблема с сервером AWS, из-за которой я должен был вручную установить общую папку, щелкнув правой кнопкой мыши на папке.
Вторая вещь на сервере, на который вы хотите перенести; Папка или путь должны быть общедоступными для всех пользователей (после передачи всех файлов вы можете изменить их только для чтения), и при этом у всех пользователей есть разрешение на запись файла в целевую папку.
И блок кода, написанный @chetanAmeta, кажется правильным.
Этот ответ может помочь вам.
С тех пор, как я предложил награду, я, конечно, смог выяснить это сам (очень жаль, что я не могу вернуть свою награду). Но в любом случае, решение состоит в том, чтобы смонтировать папку, используя пользователя сервера apache (возможно, «www-data»), и тогда сервер сможет записывать в общий ресурс, конечно, учитывая, что остальные разрешения установлены правильно.
Надеюсь, что это поможет кому-то еще, так как это было очень неприятно для меня в начале.
Если вы абсолютно уверены, что файл существует, значит, это проблема вашего сервера. Выполнение кода ниже в терминале может решить вашу проблему:
setsebool -P httpd_can_network_connect on
Устанавливает логическое значение. Больше информации: http://linux.die.net/man/8/setsebool