jackytom
@jackytom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPをコマンドラインで実行するとエラーになる。

Q&A

Closed

こちらで質問する問題か微妙なのですが、一応確認させてください。

夜間にリマインドメールを送る機能を実装するべく、ソースを用意してコマンドライン(DOSプロンプト)での実行テストを試みましたが、実行することなく、「このアプリはお使いのPCでは実行できません」のエラーになります。
(Windowsのエラー。)

管理者として実行しても、管理者権限でPCログインし直して実行しても同様の現象でした。

検索してみたところ、このエラーの原因は多岐に渡るようで、原因を探るのが難しいようです。

問題の切り分けのために、テキストファイル、WORDのファイル、Excelのファイルをコマンドラインで実行してみましたが、こちらは問題なくできました。

ということは、php側に何か問題があるのでしょうか。

もし同じ問題に直面して解決した経験のある方がいらっしゃいましたら、対策をご教示いただければ幸いです。

念のため、実行を試みたソースを添付します。

<?php
	declare(strict_types=1);
	mb_language('Japanese');
	mb_internal_encoding('UTF-8');

	function encodeHeader($value) {
		return mb_encode_mimeheader(
			mb_convert_encoding($value, 'ISO-2022-jp', 'UTF-8'),
			'ISO-2022-jp',
			'B'
			);
		}

	require_once('db_connect.php');
	require_once('password_db.php');

	$sql = ("select 
				contact_date,
				convert(AES_DECRYPT(UNHEX(mail_address), '" . $password . "')USING utf8),
				contact_cont
			 from contact where date(contact_date) <= date_sub(current_date,interval 2 day) and anser_div = :anser_div");
	$stmt = $pdo->prepare($sql);
	$stmt -> bindValue(':anser_div', 0);
	$stmt -> execute();
	$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
	foreach ($row as $data){
		$contactDate = $data['contact_date'];
		$mailAddress = $data["convert(AES_DECRYPT(UNHEX(mail_address), '" . $password . "')USING utf8)"];
		$contactCont = $data['contact_cont'];

	$from = 'mail_adress';

	$to = $mailAddress; 

	$subject = '問い合わせ督促メール';

	$body = <<< BODY

	下記の質問が未回答です
	回答をお願いします

	1.質問日
	{escape($contactDate)}

	2.メールアドレス
	{escape($mailAddress)}

	3.問い合わせ内容
	{escape($contactCont)}

	BODY;

	$sender = encodeHeader('Salon');

	$header = <<< HEADER
	From: {$sender}<{$from}>
	Reply-To: {$from}
	HEADER;

	$isMailSent = mb_send_mail($to,$subject,$body,$header);

	echo $isMailSent ? 'メール送信しました。':'メール送信失敗しました。';
	echo PHP_EOL;
}
?>

コマンドの内容

cd C:\xampp\php
C:\xampp\php\php.exe -f C:\xampp\htdocs\Portfolio\contact_remind_mail.php
0

3Answer

「コマンド プロンプト」で実際に実行しようとしたコマンド行を書いてください。

1Like

Comments

  1. @jackytom

    Questioner

    レスありがとうございます。
    質問欄にコマンドを追記しました。
    確認をお願いします。

  2. @jackytom

    Questioner

    レスありがとうございます。

    XAMPPですね。CLIではなくブラウザでphpファイルを開く(つまり、ローカルのApache
    でphpコードが実行され、結果がブラウザに表示される)のはできていますか?

    できています。問題なくメール送信までできました。

    C:\xampp\php\php.exe -v を実行するとどうなりますか?

    「このアプリはお使いのPCでは実行できません」が出ます。

    試しに、環境変数でC:\xampp\phpを設定しましたが、結果は同じでした。

  3. ということは、XAMPPインストール時に、CGI版もしくはApacheモジュール版のPHPのインストールは正常にできているが、CLI版はできていない(おそらくphp.exeが対応OS/アーキテクチャ違い)ということじゃないかという気がします。
    OSはWindows 10ですか?上記のリンクを参考にインストールをやり直してみてはどうでしょうか。

  4. @jackytom

    Questioner

    回答ありがとうございます。
    再インストールで実行できました。
    本件、クローズさせていただきます。

ダウンロード/展開したままのPHPをそのまま利用していませんか?
インターネット等からダウンロードしたファイルにはセキュリティ保護のための属性が付与されているため、属性を削除していないとファイルを開いたり実行したりすることに制限がかかります。

このページに属性の確認や削除の方法が載っているので参考にしてみてください。

1Like

PHPのコマンドを実行している環境はWindowsのようですね。実行する環境をLinuxに変更すると、意図したように実行できるかもしれません。
たとえば、以下の方法でWindowsにUbuntu Linuxをインストール可能です。

0Like

Your answer might help someone💌