6

CentOSのローカルホストApacheからFTP経由でファイルをダウンロードするスクリプトを作成しようとしていますが、動作させることができません。

私が使用しているコードは、基本的な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
4

3 に答える 3

11

わかりました、私は同じ問題を抱えていました、そして私は私の場合の解決策を見つけました。他の人を助けるためにここに投稿してください。

PHPスクリプトは失敗しますが、コマンドラインから簡単にFTPを実行できます。ファイアウォールがスクリプトをブロックしておらず、ログにPHPエラーがないことを確認しました...

周りを検索した後、私の問題はであるように見えましたSELinux。オフにしたくなかったので、の状態を確認しましたhttpd_can_network_connect

次を実行してステータスを確認します。

getsebool httpd_can_network_connect 

あなたが取得する場合:

httpd_can_network_connect --> off

これはあなたの問題かもしれません。

ノート:

あなたがすでにこれを持っているならon

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再起動後も存続するようにポリシーを設定します

于 2015-04-24T15:26:34.397 に答える
4

まず、ローカルファイアウォールなどの問題ではないことを確認します。他のツールからFTPを試してみてください。

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

wgetも接続に失敗する場合は、ネットワーク設定に問題があります。

wgetがテストに合格した場合は、詳細なエラーレポートを有効にして、コードの先頭にこれを配置することで、PHPの試行の何が問題になっているのかを確認することもできます。

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

最後に、これはあなたのケースにも関連している可能性があります:PHPでFTPサーバーに接続できない、ftp_connect()

于 2012-09-17T16:04:32.640 に答える
2

「localhost」の代わりに「127.0.0.1」を試してください

ftp_connect('127.0.0.1', 21);
于 2012-09-18T21:48:06.270 に答える