Я пытаюсь сделать некоторый скрипт для загрузки файлов через FTP из моего localhost Apache в CentOS, и я не могу заставить его работать!
Код, который я использую, тот самый, который используется любым базовым запросом ftp:
<?php $ip= FTP_IP_HERE; $port='21'; $timeout='90'; $un='username'; $pw='password'; // Connect to ftp $conn_id = ftp_connect($ip,$port,$timeout); // Open a session to an external ftp site $login_result = ftp_login ($conn_id, $un, $pw); // Check open if ((!$conn_id) || (!$login_result)) { print "FTP connection failed!"; exit(); } // turn on passive mode transfers if (ftp_pasv($conn_id, true) == FALSE) { print "Passive FTP connection failed!"; exit(); }
Я попробовал тот же скрипт на удаленном сервере, и он сработал! Я не уверен, что это любая конфигурация Apache, или ограничение PHP.
ОБНОВЛЕНИЕ :
Вот журнал ошибок:
Warning: ftp_login() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 16 Warning: ftp_get() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 22 Falha ao enviar o arquivo test.pdf<br />Array ( [type] => 2 [message] => ftp_get() expects parameter 1 to be resource, boolean given [file] => /var/www/html/ftp/FTP.php [line] => 22 ) Warning: ftp_close() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 30
Хорошо, у меня была такая же проблема, и я нашел решение для своего дела. Проводя его здесь, чтобы помочь другим.
Мой PHP-скрипт завершится неудачно, но я могу легко выполнить FTP через командную строку. Я проверил, что мой брандмауэр не блокировал скрипт, и я не получал ошибок PHP в моем журнале …
После того, как я SELinux
поиск, оказалось, что мой вопрос был SELinux
. Я не хотел отключать его, поэтому я проверил статус httpd_can_network_connect
.
Проверьте свой статус, запустив:
getsebool httpd_can_network_connect
Если вы получите:
httpd_can_network_connect --> off
Это может быть вашей проблемой.
Заметка:
Если у вас уже есть это:
httpd_can_network_connect --> on
или
SELinux is disabled
Тогда это не решит вашу проблему … Удачи вам найти решение.
Исправление
Включите httpd_can_network_connect
, выполнив:
setsebool httpd_can_network_connect=1
Проверьте свой сценарий еще раз и посмотрите, работает ли он. Это сработало для меня, поэтому я решил установить политику, чтобы это было включено.
setsebool -P httpd_can_network_connect=1
ПРИМЕЧАНИЕ. -P
устанавливает политику, чтобы она сохранялась при перезагрузке
Сначала убедитесь, что это не проблема с вашим локальным файрволом или чем-то еще. Попробуйте FTP из любого другого инструмента, например
wget --user=username --password='password' ftp://FTP_IP_HERE/file_to_download
Если wget не удается подключиться, это проблема с настройками сети.
Если wget проходит тест, вы также можете попытаться включить подробные сообщения об ошибках, чтобы увидеть, что не так с вашим PHP-attemp, поставив это вверху вашего кода:
<?php ini_set('display_errors',1); error_reporting(E_ALL|E_STRICT);
Наконец, это может также иметь отношение к вашему делу: невозможно подключиться к FTP-серверу с помощью PHP, ftp_connect ()
Попробуйте «127.0.0.1» вместо «localhost»
ftp_connect('127.0.0.1', 21);