- ベストアンサー
ftp_getについて(バージョン4.1.2)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
となると段階を追って確認していかないといけませんね。 ・FTPの接続はできているか $fpをvar_dumpするなどして内容を確認して下さい。falseになっていたら、接続自体がうまく行ってません。接続がうまく行ってない場合は、サーバーへのコネクトなのか、ログインなのかを確認しましょう ・ファイルは存在するか getするファイルパスは正しいですか? ・書き込めるか 書き込むファイル、ディレクトリのパーミッションは、スクリプトから書き込める状態になっていますか? トラブルが多いケースはこんな感じなのですが、いかがでしょうか。
その他の回答 (1)
- wakame0729
- ベストアンサー率32% (245/765)
ワーニングですが、Warning: ftp_get: inの後にワーニング内容のメッセージが表示されているはずです。色々考えられますが、書き込もうとするファイルがパーミッションの関係で書き込めない、ファイルが無いなどですね。エラーメッセージを確認して下さい。 ftp_close関数はCVS版でのみ使える、となっています。ftp_quitを使えば良いと思います。
補足
それが特に、メッセージが表示されず、 Warning: ftp_get: in ファイルパス ファイル名 行数 となっていますが、 その行数をみると、 ftp_get関数を使用しているところです。
関連するQ&A
- FTP関数について
いつも参考にさせていただいています。 PHPでFTP関数を使用したいのですが、うまくいきません。 $conn_id = ftp_connect(HOST_FTP); $upload = ftp_get($conn_id, DIR_IMAGE_TEMP . "/" . $filepath[$i],FTP_DIR . $filepath[$i],FTP_BINARY); DIR_IMAGE_TEMPは保存するパス名を表示し FTP_DIRは保存先のパス名を表示しています。 これで実行すると下記のエラーがでます。 Fatal error: Call to a member function on a non-object また、ログのパーミッションエラーがでてしまいます。 Permission denied. ログはパーミッションを777に設定しています。
- ベストアンサー
- PHP
- ftp_getでローカルにファイルが見当たらない
下記のようなスクリプトでFTPダウンロードを試みています。 ダウンロード元はホスティング会社のサーバで、 ダウンロード先は私のWindowsPCになります。 接続から読み込みまで万事うまく行き、エラー表示もなく、 Successfully written to C:\test\backup.zip というメッセージが表示されるところまでいくのですが、 C:\test\を開けてみると肝心のファイルが見当たりません。 サーバやPCの設定等もあるかもしれませんが、 どのような原因が考えられますでしょうか? よろしくお願いいたします。 <スクリプト> $local_file = "C:\\test\\backup.zip"; $server_file = "/tmp/backup.zip"; $conn_id = ftp_connect($ftpserver); $login_result = ftp_login($conn_id, $usr, $pass); ftp_pasv($conn_id, true); if(ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)){ echo "Successfully written to {$local_file}"; } else { echo "There was a problem"; } ftp_close($conn_id);
- ベストアンサー
- PHP
- phpのftp_get()でエラーが出ます。
今回phpを使ってftp関数であるftp_getを実行してみたところ【Warning: ftp_get(): Error opening】が出てきました。 サイトで調べた結果、パスの指定のミスかパーミッションが原因だと言うことがわかりました。 それから小一時間あれこれ試してみましたがダメでした・・・。 そこで今度はperlを使って同じ内容のスクリプトを書いてみると成功しました。 どなたかphpの方ではなぜ正しく動作出来ないのかをご教示ください。 以下はphpとperlのスクリプトです。 =========================================================================== <?php $FTPSERVER = "!!!"; $FTPUSER = "@@@"; $FTPPASSWORD = "***"; //ftpサーバに接続 $ftp = ftp_connect($FTPSERVER); //ユーザログイン ftp_login($ftp, $FTPUSER, $FTPPASSWORD); ftp_pasv($ftp, true); $srverfile = "test.txt"; $localfile = "data1.txt"; ftp_get($ftp, $localfile, $srverfile , FTP_BINARY); ftp_quit($ftp); ?> ============================================================================ #!/usr/local/bin/perl use Net::FTP; my $host = '!!!'; # 接続先 my $user = '@@@'; # FTPのユーザ my $pass = '***'; # FTPのパスワード my $remote_file = 'test.txt'; # リモートのファイル(これを取得) my $local_file = 'data1.txt'; # ローカルファイル(ここに保存) my $ftp = Net::FTP->new($host) or die "can not connection: $@"; $ftp->login($user, $pass) or die $ftp->message; # ログイン $ftp->binary; # バイナリモードに変更 $ftp->get($remote_file, $local_file) or warn $ftp->message; # ファイル取得 $ftp->quit; # 終了
- 締切済み
- PHP
- PHPのFTP関数ftp_fgetエラーに関する疑問
こんにちは PHPでFTPサーバからファイルをダウンロードしようとしていますが、下記のエラーが来ました: PHP Warning: ftp_fget:あと4048バイト以上アップロードする必要があります。..... 同じftp_get関数もほぼ同じメッセージを出しています。 どうすればFTPのファイルをうまくダウンロードできますか? 環境:Apache 2.48 & PHP 5.1
- 締切済み
- PHP
- commons-netでのFTP送信について
いつもお世話になっております。 commons-netを利用してのFTP送信を作成しています。 FTPClient fp = new FTPClient(); FileInputStream is = null; fp.setDefaultPort(21); fp.connect("XXX.XX.XXX.XX"); fp.login("ID", "PASS"); boolean isRemotePassive = fp.enterRemotePassiveMode(); fp.enterLocalPassiveMode(); fp.setFileType(FTP.BINARY_FILE_TYPE); is = new FileInputStream("送信ファイル"); fp.storeFile("送信先", is); fp.disconnect(); is.close(); と行っていますが、送信されません。 ログが見れないのでどこで落ちているのかわからない状況ですが、 firewallの設定がされている場合、上記方法で送信は可能でしょうか? 宜しくお願い致します。
- ベストアンサー
- Java
- ftpのgetが正常できる方法について
約100Mバイトのログファイルの差分をとるため、下記のバッチファイルとteratermマクロを実行させました。 やり方は、差分をとりたい2つのログをfptにてサーバーへ転送し、サーバーでsdiffを実行し、差分結果をftpにてとってくるものです。 バッチファイル echo open xx.xx.xx.xx > "%~dp0put.txt" echo abcdef >> "%~dp0put.txt" echo pwabe >> "%~dp0put.txt" echo put log1 log1 >> "%~dp0put.txt" echo put log2 10g2 >> "%~dp0put.txt" echo quit >> "%~dp0put.txt" ftp -s:"%~dp0put.txt" del "%~dp0put.txt" "c:\ProgramFiles\teraterm\ttpmacro.exe" "%~dp0sdiff.ttl" cho open xx.xx.xx.xx > "%~dp0get.txt" echo abcdef >> "%~dp0get.txt" echo pwabc >> "%~dp0get.txt" echo get kekka kekka >> "%~dp0get.txt" echo del log1 >> "%~dp0get.txt" echo del log2 >> "%~dp0get.txt" echo quit >> "%~dp0get.txt" ftp -s:"%~dp0get.txt" del "%~dp0get.txt" exit/b teraterm macro (sdiff.ttl) connect'xx.xx.xx.xx.:xx/ssh/2/auth=/user=abcdef/passwd=pwabc' wait'$' sendln 'sdiff logl log2 > kekka' sendln 'mv kekka kekka1' sendln 'perl -pe "s/\n\r\n/"kekka1 > kekka' wait'$' sendln 'rm kekka' sendln 'rm kekka1' Sendln 'logout' end ここから相談です。 ftpでgetしてきた差分は、ログの頭から3分の1程度しかなく、全ての差分をとることができませんでした。 調査したところ、サーバー側はログ全ての差分を取れていることを確認しました。 なぜ、ftpで作業結果をgetすると、3分の1しかないのか原因がわからないまま、試行錯誤で対処方法を見つけたのが次の方法です。 方法1(teraterm macroの変更1) 次のようにwait'$'を追加する。 sendln 'sdiff logl log2 > kekka' wait'$' sendln 'mv kekka kekka1' wait'$' sendln 'perl -pe "s/\n\r\n/"kekka1 > kekka' 方法2(teraterm macroの変更2) 次のように20秒のpauseをとる。 sendln 'sdiff logl log2 > kekka' pause 20 sendln 'mv kekka kekka1' 方法1も方法2もタイミングを取るような方法ですが、このやり方で、なぜftpでgetした差分結果が正常(ログすべての差分が取れている)になるのかがわかりません。本当にこの対処でよいか判断できません。 どなたか上記方法でよい理由がお解りでしたら、教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- FTP サーバーにある画像を表示するには
$lines = file('ftp://USER:PASS@ftp.example.com/data.txt'); FTP サーバーのテキストファイルにアクセスするには上記のように出来ますが、 サーバーにある画像を表示することは出来るのでしょうか? ↓ こんな感じで表示出来たら便利だと思ったのですが... echo "<img src=" . file('ftp://USER:PASS@ftp.example.com/image.jpg') . " />"; とりあえず今は一度保存して表示するようにしてますが、 なにかアドバイスあれば よろしくお願いします。 $conn_id = ftp_connect($ftp_server); ftp_login($conn_id, $user, $pass); ftp_get($conn_id, $url, $url, FTP_BINARY); FTP 関数一覧 http://us2.php.net/manual/ja/book.ftp.php
- ベストアンサー
- PHP
- 1台のWIn10パソコンにFTPサーバーを複数
今回、同じパソコンで他のシステムと共存になり、相手のシステムもFTPを使うので、複数のFTPサーバーを設定しようと思います。 (1)複数のFTPサーバーの設定は、FTPサイトの追加でFTPサイト名を違う名前で設定敷けば良いのですか? (2)複数のFTPサーバーの場合、 open 192.168.XXX.XXX administrator XXXXX binary get プログラム名 quit どこで、FTPサイト名を記述してこちらのFTPサイトからgetしなさいとわかるのでしょうか? 宜しくお願いします
- ベストアンサー
- オープンソース
- PHPでftpを行うと速度ダウン
PHPを使ってftp処理をしています。例えば、下記の通りのプログラムを作ったとします。 ---(※エラー処理を削除しています)--- <?php // 接続を確立する $conn_id = ftp_connect($ftp_server); // ユーザ名とパスワードでログインする $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // ファイルをアップロードする $upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); // FTP ストリームを閉じる ftp_close($conn_id); ?> ---------------------------------- 問題なく、ftp処理はできるのですが、MS-DOSプロンプトからftpした場合やffftpなどのソフトを使ってftpした場合と比べて格段に速度が落ちます。 具体的に言えば、サーバ側・クライアント側も光回線を使っていた場合に MS-DOSプロンプト:80Mbpsくらい PHPによるftp:10Mbpsくらい の速度に落ちます。実行速度はMRTGを使ってみています。 PHPの仕様上、どうしようもないものなのでしょうか。 もしくは速度アップの関数などあるのでしょうか。 ご存知の方、ご教授ください。
- 締切済み
- PHP
- ftpのgetコマンドで425エラー
ftpについて質問です。 質問1 getコマンド時に『425 Unable to build data connection: Connection timed out』となる原因がわかりません 質問2 フォルダ名やファイル名が日本語だとコマンドが認識されないのですが、FTPの仕様でしょうか 【環境】 ローカルPCのOS:windows7 サーバのポート解放状況:21番は空いてますが、20番は閉じてます エクスプローラを使用してアドレスバーに『ftp://サーバ名』を入力すると接続でき、マウスのドラッグドロップでダウンロードできますが DOSコマンドプロンプトで接続すると、dirコマンドやgetコマンドがエラーになります。 なお!dirはlcdは成功します。 (↓↓↓以下、コマンドの履歴↓↓↓) C:\>ftp ○○○ ○○○ に接続しました。 ~省略~ 230 User ○○○ logged in ftp> cd ○○○ 250 CWD command successful ftp> binary 200 Type set to I ftp> get ○○○.zip 200 PORT command successful 425 Unable to build data connection: Connection timed out ftp> dir 200 PORT command successful 425 Unable to build data connection: Connection timed out ftp> (↑↑↑コマンドの履歴ここまで↑↑↑) よろしくお願いします。
- ベストアンサー
- Windows系OS
お礼
いろいろとありがとうございます。 バグレポートにこっそりと4.1.2の場合はエラーがでてくると書いてありました。 ログは取得できているので、@で回避したいと思います。 ありがとうございました。