Не удается подключиться к FTP с PHP ftp_connect из localhost

Я пытаюсь сделать некоторый скрипт для загрузки файлов через 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);