カレッヂ |
質問者 ぴらおか
投稿日 11/28(水) 22:50:46
ときどきお世話になります。今回もよろしくお願いします。 cgiにperlを使っていますが、system関数を使ってファイルのコピーをしようとすると どうもスクリプトが正常に修了しません。 どうやらsystem "cp file_a file_b"という行で死んでいるようですが ファイルのパーミッション、実行ファイルのsビットなどいろいろやっても うまくいかないです。 よろしかったらご教授くださいませ。 |
回答者 らいらい
[削除]
投稿日 12/2(日) 01:27:51
はじめまして、らいらいといいます。>ぴらおかさん まず、system関数自体が利用できるか確認します。プロバイダー の提供しているperlバージョンが4だと利用できなかった記憶があります。 BIGLOBEなど、4と5を両方提供しているような環境では、 CGIの1行目の書式を見直してみましょう。 system関数を利用してのファイルのコピーには制限があります。 まず、プロバイダー側でシステムのcpコマンドの利用を許可していることが 大前提です。UNIX系システムではさまざまな手段でコマンドを利用 不可にすることもできます。 また、systemからコマンドを呼び出す際、直接cpと書いても 呼び出せないこともあります。フルパスで/bin/cpと書きましょう。 また、systemコマンドは system(コマンド, 引数1, 引数2, ...) という書き方もできるので、複雑なコマンドを書くときは利用できるかも 知れません。(利用できないこともあります) 以下のような簡単なCGIで、cpコマンドが利用できるか確認できます。 なお、このCGIを、CGIから書き込みのできるディレクトリに設置し、 設置したディレクトリと同じディレクトリにsample.txtを置いてください。 -------ここから #!/usr/local/bin/perl5 # 上の行はプロバイダーに合わせて変更してください my $file1 = './sample.txt'; my $file2 = './test-ok.txt'; if ( -e $file1 ) { system('/bin/cp', $file1, $file2); } if ( -e $file2 ) { print qq{Content-type:text/html\n\nOK}; } else {print qq{Content-type:text/html\n\nCannot copy};} exit; -------ここまで BIGLOBEではテキストファイルのコピーが正常に行われました。 バイナリファイルのテストはしていません。 参考になれば幸いです。 |
返信(回答)する
Web裏技 |