2012-09-17 12 views
6

I Ho cercato di creare script per scaricare file tramite FTP dal mio localhost Apache in CentOS e non riesco a farlo funzionare!Impossibile connettersi a FTP con PHP ftp_connect da localhost

Il codice che sto usando è proprio quello utilizzato da qualsiasi richiesta ftp di base:

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

ho provato lo stesso script sul server remoto e ha funzionato! Non sono sicuro se sia una configurazione apache da fare, o una limitazione PHP stessa.

UPDATE:

Ecco il log degli errori:

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 

risposta

4

prima assicurarsi che non è un problema con il firewall locale o qualcosa del genere. Prova a FTP da qualsiasi altro strumento, ad es.

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

Se wget non riesce a connettersi, è un problema con le impostazioni di rete.

Se wget passa il test si può anche provare ad abilitare verbose segnalazione degli errori per vedere cosa c'è di sbagliato con il tuo attemp PHP ponendo questo nella parte superiore del vostro codice:

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

Infine, questo potrebbe essere rilevante anche per il vostro caso: Cannot connect with FTP server with PHP , ftp_connect()

+0

Ho provato a scaricare il file con wget e scaricato –

+0

vedo i tuoi log degli errori, in modo da ftp_connect restituisce FALSE nel tuo caso. – Yuriy

+0

Provare a sostituire l'host del server/ip nel codice con ftp.mozilla.org o qualsiasi altro server FTP pubblico e vedere se si apre. Quindi stai usando "ftp: //" davanti all'IP del tuo server? Non ricordo se è necessario, prova sia con che senza quel prefisso. – Yuriy

1

Try '127.0.0.1' invece di 'localhost'

ftp_connect('127.0.0.1', 21); 
9

Ok, ho avuto lo stesso problema e ho trovato il soluzione per il mio caso. Pubblicalo qui per aiutare gli altri.

Lo script PHP non funzionava, ma potevo facilmente FTP tramite la riga di comando. Ho verificato che il mio firewall non stia bloccando lo script e non ho riscontrato errori PHP nel mio registro ...

Dopo aver cercato in giro, è risultato che il mio problema era SELinux. Non volevo spegnerlo, quindi ho controllato lo stato di httpd_can_network_connect.

verificare lo stato eseguendo:

getsebool httpd_can_network_connect 

Se si ottiene:

httpd_can_network_connect --> off 

Questo potrebbe essere il problema.

Nota:

Se hai già questo on:

httpd_can_network_connect --> on 

o

SELinux is disabled 

Allora questo non ha intenzione di risolvere il tuo problema ... Buona fortuna trovare il vostro soluzione.

The Fix

Attiva httpd_can_network_connect eseguendo:

setsebool httpd_can_network_connect=1 

verificare nuovamente lo script e vedere se funziona. Questo ha funzionato per me, quindi mi sono assicurato di impostare un criterio per mantenerlo abilitato.

setsebool -P httpd_can_network_connect=1 

NOTA: -P imposta la politica in modo che persiste per un riavvio

+1

QUESTO. Grazie a Jeremy, questo ha risolto bene il mio problema. – Scorchio

+1

grazie. ore di lavoro senza dove e dannatamente selinux! – user1017063

+1

Dolce jebus! questo ha risolto il mio problema e non mi sento spesso .. – Sam