2012-09-17 21 views
6

I He estado tratando de crear un script para descargar archivos a través de FTP desde mi servidor local Apache en CentOS y no puedo hacerlo funcionar.No se puede conectar a FTP con PHP ftp_connect de localhost

El código que estoy usando es el mismo utilizado por cualquier solicitud ftp básica:

<?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(); 
} 

Probé la misma secuencia de comandos en el servidor remoto y funcionó! No estoy seguro de si se debe realizar alguna configuración de Apache, o una limitación de PHP en sí.

ACTUALIZACIÓN:

Aquí está el registro de errores:

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 

Respuesta

4

En primer lugar asegúrese de que no es un problema con el servidor de seguridad local o algo. Intente FTP desde cualquier otra herramienta, p.

wget --user=username --password='password' ftp://FTP_IP_HERE/file_to_download 

Si wget no se conecta también, es un problema con la configuración de red.

Si wget pasa la prueba también puede probar que permite la presentación de informes de error detallado para ver lo que está mal con su attemp PHP mediante la colocación de esta en la parte superior de su código:

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

Finalmente, esto podría ser también relevante para su caso: Cannot connect with FTP server with PHP , ftp_connect()

+0

Probé la descarga del archivo con wget y se descargó –

+0

que ver su registro de errores, por lo ftp_connect devuelve FALSE en su caso. – Yuriy

+0

Trate de reemplazar su servidor host/ip en el código con ftp.mozilla.org o cualquier otro servidor ftp público y vea si se abre. Entonces, ¿está usando 'ftp: //' frente a la IP de su servidor? No recuerdo si eso es necesario, pruebe ambos con y sin ese prefijo. – Yuriy

1

Try '127.0.0.1' en lugar de 'localhost'

ftp_connect('127.0.0.1', 21); 
9

Ok, yo tenía el mismo problema y me encontré con la solución para mi caso. Publicarlo aquí para ayudar a otros.

Mi script PHP fallaría pero podría FTP fácilmente a través de la línea de comandos. Verifiqué que mi firewall no estaba bloqueando el script y no estaba obteniendo ningún error de PHP en mi registro ...

Después de buscar, apareció mi problema era SELinux. No quería apagarlo, así que revisé el estado de httpd_can_network_connect.

comprobar su estado ejecutando:

getsebool httpd_can_network_connect 

Si se obtiene:

httpd_can_network_connect --> off 

Ésta puede ser su problema.

Nota:

Si ya tienen este on:

httpd_can_network_connect --> on 

o

SELinux is disabled 

Entonces esto no va a resolver su problema ... Buena suerte para encontrar su solución.

La solución

Habilitar httpd_can_network_connect ejecutando:

setsebool httpd_can_network_connect=1 

poner a prueba su script de nuevo y ver si funciona. Esto funcionó para mí, así que me aseguré de establecer una política para mantener esto habilitado.

setsebool -P httpd_can_network_connect=1 

NOTA: -P establece la política por lo que persiste durante un reinicio

+1

ESTO. Gracias Jeremy, esto resolvió mi problema bien. – Scorchio

+1

gracias. ¡horas de trabajo sin llegar a ninguna parte y era malditamente selinux otra vez! – user1017063

+1

¡Dulce jebus! esto solucionó mi problema y no me siento grueso ... – Sam

Cuestiones relacionadas