• ベストアンサー

シェルスクリプトとphpを使ったプログラミングについて

UNIXサーバで、現在、シェルスクリプトやphpを使ってプログラムを書いています。 今は「csh cmd ファイル名」という形でシェルスクリプトを実行しています。このままではプロンプト画面で味気ないので次のようにしたいのですが、やり方が分りません。 まず、phpやhtmlで作成したファイル提出画面にてファイルを提出してもらいます、そして、それを受け取ります。その時例えば送信ボタンを押すと思うのですが、そのボタンを押したらファイル名を受け取り「csh cmd ファイル名」が実行されるといふうにしたいのです。何かいい方法があれば教えて頂きたいです。phpでなくてもいいので、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.3

>> $cmd='/bin/csh CMD '.$_FILES['userfile']['name'];のように >> オリジナルファイルでやりたいのでこのようにしました PHPのアップロードの仕組みを御理解していないようですね。  ブラウザで、「testc」というファイルをアップロードしても サーバー上では一時的なファイル名を付けて保存されます。 そのときのファイル名が $_FILES['userfile']['tmp_name'] です。 元のファイル名は $_FILES['userfile']['name']ですが、 サーバー上にそのファイル名の実体は有りません。実体は$_FILES['userfile']['tmp_name'] です。 どうしても$_FILES['userfile']['name']というファイル名にしてからファイルを扱いたいのなら、 move_uploaded_fileなどを使ってリネームしながらファイルをコピーしてから使用します。 $tmp_name = $_FILES['userfile']['tmp_name']; $name = $_FILES['userfile']['name']; move_uploaded_file($tmp_name, "data/$name");

rinta0209
質問者

お礼

一応ファイルはmove関数などでコピーしてやっていました。.cの.が結合として扱われていたのなんなのか・・・今はうまくいっています。 ありがとうございました。

その他の回答 (2)

回答No.2

ご質問の内容を理解できているか自信がありませんが‥ クライアントのWebの画面で入力したファイル名でshellスクリプトを 実行したいとのご質問だと思いますが サーバでWebサーバがシェルの実行許しているのであれば、 CGIをシェルで書くこともできます。 (PHPでもPerlでもCの実行モジュールでも可能です。) 但し、質問者さんはあまりWeb等にお詳しく無いようですのでperl,phpが 情報が多く楽かもしれません。 (perlからのshellの実行は、system()関数等が使えます。) perl、PHPでのフォームデータの取り出しは、Googleなどで検索すると サンプルがありますのでお調べください。

参考URL:
http://www.google.co.jp/search?q=perl+cgi
rinta0209
質問者

お礼

返信ありがとうございます。 web等はあまり分かっていませんので、phpでやっています。 色々調べてみたいと思います。ありがとうございました。

  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

>> phpやhtmlで作成したファイル提出画面にてファイルを提出してもらいます >> ファイル名を受け取り「csh cmd ファイル名」が実行される 以下のようなプログラムでは如何でしょうか ファイル提出画面例 <html><body> <form enctype="multipart/form-data" action="shellexec.php" method="POST"> <td bgcolor="#FFFFF8"> <input type="hidden" name="MAX_FILE_SIZE" value="65536" /> <input name="userfile" type="file" /> <input type="submit" value="送信" o><br /> </form> </body></html> 上記の例は、アップロードファイルのサイズを64kバイトに制限しています。 ファイル名を得て実行例(shellexec.php) <?php $cmd='/bin/csh CMD '.$_FILES['userfile']['tmp_name']; $output = shell_exec($cmd); echo "<pre>$output</pre>"; ?> 上記のCMDはシェルスクリプトに置き換えてください。 アップロードされたサーバ上のファイル名は$_FILES['userfile']['tmp_name']ですが オリジナルのファイル名は $_FILES['userfile']['name'] で取得できます

rinta0209
質問者

補足

返信ありがとうございます。 上記のようにやったら動いたんですが、問題もありました。 $cmd='/bin/csh CMD '.$_FILES['userfile']['name'];のようにオリジナルファイルでやりたいのでこのようにしました。しかし、test.cというファイルなんですが、testcというふうになってしまって「.」を読み込んでくれなくて目的通りの動作をしませんでした。 コマンド中でcatコマンドを使っているのですが、そこでtestcというファイルはないと言われて気付きました。 これはどうしたらいいのでしょうか…。