Questa domanda è in linea con this question, Sto cercando di connettermi al server FTP sicuro e non è in grado di connettersi, la parte strana è che sono in grado di fare ssh e connettermi al server ma quando provo a farlo dal codice PHP utilizzando alcuni approcci differenti, ma non sta funzionandoConnessione per proteggere il server FTP da PHP
approcci:
- FTP Wrappers
ftp_connect
&ftp_login
ftp_ssl_connect
ssh2_sftp
ssh2-scp-send
&ssh2-scp-receive
- Non ho provato questo approccio ancora, ma raccomandato nei commenti porzione e così sarebbe lavorare su questo e pubblicherà aggiornamenti in seguito.
Codice in materia Approccio 1:
$ftp_server = "ftp://username:[email protected]:21/{$log_file_name}";
$opts = array('ftp' => array('overwrite' => TRUE));
$context = stream_context_create($opts);
$put_file = file_put_contents($ftp_server, $response, LOCK_EX,$context);
Qui, inoltre, non sono in grado di connettersi a garantire Server FTP, qualche suggerimento sul motivo per cui non è in grado di connettersi?
Codice in materia Approccio 2:
ftp_server = 'www.server.com';
$conn_id = ftp_connect($ftp_server) or die ("Cannot connect to host");
//Program dies out here and give error message "Cannot connect to host",
//but why ftp_login does not work here, Any Suggestions ?
$ftp_user_name = "login";
$ftp_user_pass = "password";
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection and login result
if ((!$conn_id) || (!$login_result))
{ echo "FTP connection has encountered an error!";
echo "Attempted to connect to $ftp_server for user $ftp_user_name....";
//exit;
} else
{
echo "Connected to $ftp_server, for user $ftp_user_name".".....";
}
Codice in materia Approccio 3:
Here am using same code as approach 1 but instead of ftp_connect, am using ftp_ssl_connect
Codice in Approach 4:
$connection = ssh2_connect('www.server.com', 22);
ssh2_auth_password($connection, 'login', 'password');
$sftp = ssh2_sftp($connection);
//exit();
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');
Qualcuno può consigliare perché non riesco a collegarmi al server FTP sicuro usando gli approcci sopra ma sono ancora in grado di farlo usando ssh?
Esistono altri approcci per connettersi al server FTP sicuro utilizzando php?
UPDATE:
Q1. Ho provato di nuovo a usare ftp_connect ma si è spento e perché si esaurisce, quali sono gli scenari in cui muore ftp_connect?
Q2. Abbiamo solo questo approccio per connettersi al server o ce ne sono altri che possiamo implementare?
Q3. Questa lingua php è correlata al fatto che non supporta la connessione FTP protetta? O c'è un altro modo per farlo usando php, se sì che fornire approcci diversi in quanto sarebbe molto utile.
UPDATE 1:
io cercavo di google più sul problema e sembra che se ftp_connect non funziona oltre il firewall potrebbe essere uno dei motivi per questo. Non sono del tutto sicuro se questo è il caso, ma sto studiando di più su di esso e pubblicare un aggiornamento qui se trovo qualcosa di utile.
Soluzione possibile
Problema
Se rimuovo il "or die" poi si ottiene l'errore:
Quando si esegue da una pagina web:
Warning: ftp_login() expects parameter 1 to be resource, boolean given in /var/www/ftp_test.php on line 28
var_dump ($ conn_id); restituisce bool (falso).
Da riga di comando/usr/bin/php /var/www/ftp_test.php
var_dump ($ conn_id); restituisce la risorsa (4) di tipo (Buffer FTP).
Script completato.
Soluzione 1
Questo potrebbe essere uno solution
:
Provate a spegnere selinux
e qui è la way
o Search : How to disable selinux per spegnerlo temporaneamente o permanentemente.
Soluzione 2
Se non si desidera disattivare completamente SELinux, si potrebbe ottenere quello che ti serve, semplicemente impostando il httpd_can_network_connect utilizzando il comando setsebool.
verificare che sia stato precedentemente impostato su "off": getsebool httpd_can_network_connect
impostarlo su "on":
setsebool httpd_can_network_connect=1
Accendere SELinux indietro: setenforce 1
Controllare assicurati che php ftp_connect
funzioni ancora quando sei in esecuzione con httpd.
impostare il criterio (-P) su "on" in modo che persiste per un riavvio:
setsebool -P httpd_can_network_connect=1
Soluzione 3
Ci potrebbe anche essere questione con firewall aziendale. Assicurarsi che sia configurato correttamente e che i diritti di accesso siano impostati correttamente.
Soluzione 4
Un altro approccio è quello di utilizzare cURL : libcurl in quanto può essere utilizzato per collegare e comunicare a diversi tipi di server con diversi tipi di protocolli
Soluzione 5
C'è un progetto open source chiamato PHP Secure Communication Library (phpspeclib) che può essere utilizzato anche per stabilire una connessione sicura al server FTP.
Quando si SSH nel ftp, è dallo stesso server che il vostro lo script php è in esecuzione? In caso contrario, potrebbe essere un problema dns –
Sto usando lo stesso server quando sto facendo ssh in ftp e quindi non sono sicuro se questo potrebbe essere un problema? – user260204
sFTP non è FTP. fa parte del protocollo SSH. FTP ssl è qualcosa di diverso. Ciò significa che l'approccio 1, 2 e 3 non funzionerà. Forse potresti provare a ricevere/inviare file con ssh2_scp_send/ssh2_scp_recv? –