0

testphp.php次の内容の PHP ファイルがあります。

<?php
echo system('mysql -u root -pMyPassword -e "SELECT VERSION();"');
?>

コマンドラインから完全に出力されます:

D:\>php testphp.php
VERSION()
5.5.24-log
5.5.24-log
D:\>

Web ブラウザー ( http://localhost/testphp.php) を介して同じファイルを実行すると、出力が表示されません。なんで?

4

1 に答える 1

2

これには多くの理由があります。

  1. mysqlWeb サーバーが実行されているユーザーのパスにない可能性のあるコマンドを使用しています。コマンド ラインから実行すると、自分のユーザー アカウントで実行されます。Web サーバーは別の (制限された) アカウントで実行されます。mysqlバイナリへのフル パスを指定する必要があります。プロンプトwhich mysqlから通常のユーザーとして入力して、実行可能ファイルへのフル パスを調べます。

  2. コマンドmysqlはシステム構成によって制限されているため、すべてのユーザーがコマンドを実行できるわけではありません。

  3. Web サーバー上の PHP 構成では、system().

  4. これを実行することで同じ情報を取得できます (php インストール用に mysql が構成されていると仮定します):

    $con = new mysqli("localhost", "root", "MyPassword");
    printf("%s", $con->server_info);
    
于 2013-05-04T09:05:29.727 に答える