![]() |
カレッヂ |
質問者 安達
投稿日 7/14(土) 15:56:15
CGIの中で、ファイルを生成してそれを他のサーバーへFTPでputするという処理を行いたいのですが、Net::FTPというモジュールを使ってputしようとしたところ、ファイルサイズが0のファイルがアップされてしまいます。 同じレンタルサーバーに置いている別ドメインのところへは正常にアップできるのですが、他のサーバーへ送信すると、そういう現象がおきてしまいます。 何かHINTになるようなことでも結構ですので、教えていただけないでしょうか? 当方まだまだ未熟者です。よろしくお願いいたします。 |
回答者 呑兵衛
[削除]
投稿日 7/14(土) 17:12:39
呑兵衛といいます。 Aプロバイダーから直接 BプロバイダーのCGIディレクトリにアクセスした場合、 このような現象が起きることがあるようです。 プロバイダーによっては cgi のようなサーバ資源を多用するファイル等を制限している 場合があり、Aプロバイダーが本籍地だけれどcgiに対応していないため、 cgi だけBプロバイダーを利用する、という利用方法に対して 直リンクなどで cgi-binディレクトリなどにアクセスした場合、 Forbidden とアクセス制限をかけているようです。 対策はできますが、このようなサーバの利用法はインターネットのネチケットに反しますので お教えできません。 |
質問者 安達
[削除]
投稿日 7/14(土) 19:16:32
返信ありがとうございました。 おっしゃっているのは、たとえばFreewebのようなCGIを利用できるHPスペースのCGIだけを利用しようとするというようなことですか? 質問の仕方が悪かったと思うのですが、私の本ページを置いているサーバー自体はCGIの利用もOKですし、そのCGI自体はちゃんと動作しています。 プログラムの中で、一部のデータを他のサーバーへ送信する必要があり、それをFTPによってそのサーバーへ送るわけですが、データファイルは送られるものの、中身がちゃんと送れていないという現象が起こるわけです。 どういうわけか、同じサーバー会社(サーバー自体は同じかどうか不確かです)で管理してもらっているドメイン宛に同じことをすると正常に中身も送られるんですよね。 ですから、Perlのモジュールも動作していると思いますし、何が原因なのか・・・ということなんです。 ちなみに、その送りたいファイルを一旦FTPソフトを使用してPCにダウンロードしてアップロードすればもちろん正常に送ることができます。 |
回答者 呑兵衛
[削除]
投稿日 7/15(日) 00:27:47
> 他のサーバーへ送信する とは、Aプロバイダーから違う会社のBプロバイダーに送るという意味合いでしょうか? そうだとしたら、HTTP_REFERERを検証することによって許可していないURLからのアクセスを 拒否できるように、CGIからのアクセスでもそのような仕様になっているのではないでしょうか。 |
質問者 安達
[削除]
投稿日 7/15(日) 00:37:13
せっかくご回答いただいたのですが、この場合HTTP_REFERERは関係ないかと・・。 HTTPではなく、FTPでputしていますので。 かつ、ファイルが送信されるところまでは行っていますので。 |
回答者 呑兵衛
[削除]
投稿日 7/15(日) 18:01:19
サーバーの仕様なので、わかりやすくHTTP_REFERERにたとえました。 セキュリティのため転送先が特定のアクセスを拒否するには サーバーの21番ポート(ftp制御ポート)に接続要求が来ると inetd というデーモンが tcpデーモンに問い合わせ、hosts.allow というファイルを調べ 接続を許可する先かどうかを調べます。 そこに許可されていない接続先であればエラーを返す、というのが ftp接続の仕組みです。 anonymousが許可されていない場合、id と パスワードによって ftpサーバーへの接続 の可否を検証する設定であれば、上記の制御が働く、という仕組みです。 アクセス拒否の仕方は様々だと思いますが、 エラーコードを受け取れない先、つまりcgiからの接続要求の場合は、ファイル名のみ作り、 中身を受け取らない、という仕様になっているのではないでしょうか。 これは想像ですが。 |
質問者 安達
[削除]
投稿日 7/15(日) 20:35:05
ありがとうございます。 レンタルサーバーの仕様なのでわからないですよね。 CGI以外の方法をかんがえてみます。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |