こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP System関数が動作しません

サーバー上の、あるphpファイル(sample_c.php)をシステム関数を使用して実行する必要があり、以下の流れのプログラムを作成しました。

sample_a.php でSubmit
sample_b.php でSystem関数でsample_c.phpを呼び出し
sample_c.php で実行

です。

<? /* sample_a.php */ ?>

<form action="sample_b.php" method="post">
<input type="hidden" name="login" value="sample_user">
<input type="hidden" name="action" value="trigger_b">
<input type="submit" value="submit">
</form>


<? /* sample_a.php */ ?>

<?
if($_POST['action'] =="trigger_b")
{
$login = $_POST['login'];
system("sample_c.php $login");
header('Location: sample_a.php?action=fin');
exit;
}
else
{
header('Location: sample_a.php?action=error');
exit;
}

?>

<? /* sample_c.php */ ?>

$_SERVER['argv'] で受け取った値を処理

-----------------

3つのファイルは全て同じ階層に配置してあります。
sample_a.phpでsubmitすると、sample_a.php?action=fin にリダイレクトするのですが、
sample_c.php内の動作が実行されていません。

中身はDB接続して、テーブルに保存する単純なsql文が入っていて、sample_c.php単体での動作は確認しています。
(単体テストの場合は$_SERVER['argv']の代わりに変数に値をセットして実行しています。)

System関数で変数を受け渡さずに
system("sample_c.php $login");

system("sample_c.php")
として実行してもうまくいきません。;


原因が分かるかたがいらっしゃれば教えてください。
お願いします。

投稿日時 - 2011-07-22 14:48:48

QNo.6892115

すぐに回答ほしいです

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

> system("sample_c.php $login");
これを
> system("./sample_c.php $login");
にしてみてください。

system関数は、環境変数PATHに基づいて指定したコマンドに対応する実行ファイルの検索を行います。カレントディレクトリは通常PATHに含まれない為、system("sample_c.php");としても、カレントディレクトリ上の sample_c.php が実行されることはありません。
system("./sample_c.php")とすると、PATHは無視して、実行ファイルの場所を直接指定するという形になります。

これでも動かない場合は、sample_c.php が「実行ファイル」として動作できるようになっているかの確認をしてください。
HTTP経由でアクセスする場合、PHPファイルは単なるデータファイルにすぎませんが、
system関数で呼び出す場合は、PHPファイルに「実行ファイル」としての体裁を整える必要があります。
・ファイルの属性(パーミッション)で、実行属性を付ける必要があります。
・ファイルの1行目を「#!/usr/bin/php」のように、PHPの実行ファイル名を記述する必要があります。

以上の体裁の整えていない/整え方がわからないのでしたら、単純な解決方法としては、

system("php sample_c.php $login");

と、system関数に指定するコマンドとしては「php」を渡す、という方法があります。

投稿日時 - 2011-07-22 16:07:54

お礼

ありがとうございます。
sample_c.phpの中身自体は私の作成したものではなく、変更もできるだけしたくなかったので、
system("php sample_c.php $login");
こちらの方法で実行することができました。

細かく説明していただき、助かりました。
より一層精進したいと思います。

投稿日時 - 2011-07-22 21:27:24

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>system("sample_c.php")

まずは、system("ls")などして、system関数が利用できるかどうか
調べるところから始めてください。

system()が実行可能だとしてsample_c.phpはCLIで書かれていますか?
またsample_c.phpにapache(もしくは他のhttpd)からの実行権限はついていますか?

投稿日時 - 2011-07-22 15:48:49

あなたにオススメの質問