- - PR -
PHPで外部コマンド実行
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-30 00:48
PHPでexec()関数を使って、PerlのCGIを実行しようとしていますが、どうしてもなりません。
それは、PHPでmkdir()を実行するとnobodyでディレクトリが出来てしまい、FTPで削除されないので、CGIでディレクトリを作成しようと思っています。 $UploadDirSiteT = "/home/***/public_html"; $userT = "user"; $SiteNameET = "abc"; $mkdir_cgi = "/home/***/public_html/mkdir.cgi"; $a = exec("$mkdir_cgi, $UploadDirSiteT $userT $SiteNameET"); このような感じでmkdir.cgiを実行したいのですが、exec()関数の記述の仕方が分かりません。 exec("$mkdir_cgi, $UploadDirSiteT $userT $SiteNameET"); このように$mkdir_cgiの後には、mkdir.cgiに渡したいデータを書いていいのでしょうか? その辺が色々調べたのですが分かりませんでした。 --------------- mkdir.cgiの内容 --------------- #!/usr/bin/php -p <? if($_SERVER["argv"][1] AND $_SERVER["argv"][2] AND $_SERVER["argv"][3]) { $_SERVER["argv"][1] = $UploadDirSite; $_SERVER["argv"][2] = $user; $_SERVER["argv"][3] = $SiteNameE; if(mkdir($UploadDirSite ."/" .$user. "/" .$SiteNameE, 0755) { echo 'ok'; exit; } } ?> このような感じです。 お分かりになられる方、宜しくお願いします。 [ メッセージ編集済み 編集者: EMIKO 編集日時 2006-01-30 00:49 ] | ||||||||
|
投稿日時: 2006-01-30 06:23
おはようございます。
以下、間違ってたらすいません。
nobody でディレクトリが出来るというのは、ディレクトリの所有者が nobody になるとおっしゃっているのでしょうか。 だとしたら、方式をCGIに変えて改善されるのか疑問です。 なぜ nobody になるかお分かりですか? それと、Perl のCGIとおっしゃっている割には、
実は PHP でお書きのようですね。(^^; _________________ takepon てんてこダンス | ||||||||
|
投稿日時: 2006-01-30 19:01
お返事ありがとうございます。
そうです。nobodyの所有者で、ディレクトリが出来てしまうのです。 それで、CGI(PerlでもPHP)でディレクトリを作成すると、所有者nobodyではできないと聞いたので・・・ PerlのCGIというのは間違いでした。PHPをCGIとして動作させようとしていました。 nobodyになるのか・・・だいたいは分かります。(間違っているかもしれませんが) PHPは、Apache権限?で動作するからですか? CGIにしてしまうと、その所有者権限でファイル等の作成を行える?? こんな感じで理解していました。 | ||||||||
|
投稿日時: 2006-01-30 20:10
ちゃんと調べたほうがいいとおもいます。
PHPファイルをブラウザから呼び出したとき、 PHPをapacheのモジュールとして実行していれば、 そのPHPファイルはapacheを実行しているユーザー権限で実行されます。 そのため、nobodyでディレクトリができます。 そのPHPの中で、execで外部コマンドを実行した場合、 その外部コマンドは元のPHPを実行しているユーザー権限で実行されるので、 今やってることは無駄ではないかとおもいますが。 たぶん、CGIの場合にってのは、suExecが有効な場合に、 ブラウザからそのCGIスクリプトを呼び出すと、 通常のapacheに実行ユーザーではなく、 そのCGIスクリプトファイルの所有者権限で実行されるので、 作ったディレクトリの所有者がnobodyではないって話しではないでしょうか。 PHPの中でスーパーユーザーになれるのであれば、 chownでユーザー書き換えてしまう手もあります。 単純にFTPクライアントとかでアクセスしたときに、 書き込み権限がないために削除できないからというなら、 書き込み権限をchmodでディレクトリに対して与えてやればいいんじゃないでしょうか。 もしかしたら他の方法があったりするかもしれませんが、参考になれば。 | ||||||||
|
投稿日時: 2006-01-31 01:55
お返事ありがとうございます。
そうです。PHPをapacheのモジュールとして実行しているので、所有者がnobodyとしてディレクトリが作成されます。
そうです、そうです。suExecが有効な場合ですね。 私の自宅サーバーの方では、suExecが有効でないので無意味な事をしていたのかもしれません。
そうです。FTPクライアントで、そのディレクトリに対してファイルのアップロードや削除等を行いたいのですが、パーミッションは[777]にしています。 やはり、所有者が違うのでFTPでは何もできないのですよね? 何かいい方法があればいいのですが・・・ | ||||||||
|
投稿日時: 2006-01-31 04:21
suExecが有効であり、そのCGIスクリプトがapacheから呼ばれた場合 だとおもいますが。 仮にsuExecが有効な状態で、モジュール版のPHPで動作するPHPスクリプトから、 execでCGIスクリプトが実行されても、今となんら変わらないとおもいますが。
やってみればはっきりするとおもいますが。 PHPで作成したディレクトリのオーナーがnobodyであっても、 パーミッションが777であるならば、 別のユーザーでFTPクライアントを用いて接続すれば、 そのディレクトリに対して、 ・読み込み(ディレクトリ内の表示、ファイルのダウンロード) ・書き込み(ディレクトリの削除、ファイルのアップロード・削除) は普通にできます。 むしろできないとパーミッションを777にしている意味がないとおもいませんか? ・ [ メッセージ編集済み 編集者: kalze 編集日時 2006-01-31 04:27 ] | ||||||||
|
投稿日時: 2006-01-31 06:03
おはようございます。
kalze さんのおっしゃる通り、わたしの認識では普通に出来るはずですが、 パーミッションが[777]なのに所有者が違うのでFTPでは何もできない、という 例を示されてはどうですか? もしかしたら、ディレクトリ自体にスティッキィビットが立っていたりすると、 他のユーザでは削除できないです。 _________________ takepon てんてこダンス [ メッセージ編集済み 編集者: takepon 編集日時 2006-01-31 06:04 ] |
1