web-dev-qa-db-ja.com

PHPのMySQL拡張機能が機能しない

Debianサーバーでは、SquirrelMailのインストールと削除(php5、mysql ...のダウングレードとアップグレードを伴う)の後、MySQL拡張機能PHPは機能しなくなりました。

Php5-mysqlをインストールしていて、php-cliを介してデータベースに接続しようとすると正常に接続しますが、Apacheが提供するWebから接続しようとすると接続できません。

このスクリプトは、php5-cliによって実行されます。

echo phpinfo();
$link = mysql_connect('localhost', 'user, 'password');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
echo 'Connected successfully';
mysql_close($link);

「/etc/php5/cli/conf.d/mysql.ini」を含むphpinfoと、すべての構成(SOCKET、LIBS ...)を含むMySQLセクションを出力し、「正常に接続しました」と出力します。

しかし、WebブラウザからアクセスするApacheで実行すると、「/ etc/php5/Apache2/conf.d/mysql.ini」を含むphpinfoが表示されますが、MySQLセクションが欠落しており、スクリプトは「致命的なエラー:未定義の関数mysql_connect() "を呼び出します。

「/etc/php5/cli/conf.d/mysql.ini」と「/etc/php5/Apache2/conf.d/mysql.ini」はどちらも実際には同じ構成であることに注意してください。これは、Debianで構造を持っているためです。 :

/etc/php5/Apache2
/etc/php5/cgi
/etc/php5/cli
/etc/php5/conf.d

そして、両方が同じディレクトリを指しています。

/etc/php5/Apache2/conf.d -> ../conf.d
/etc/php5/cli -> ../conf.d

/etc/php5/conf.d/mysql.iniは1行で構成されています。

extension=mysql.so

だから私の質問は:PHPのMySQL拡張機能が、動作しているphp-cliと同じように構成が含まれているのに、なぜ動作しないのですか?

どうもありがとう!

2
Víctor

これはおそらく構成の問題ではありません。私はDebianで物事がどのように行われるか(PHPのアップグレード/ダウングレードに関して)に精通していませんが、Apacheで使用されるPHPとPHP CLI実際、異なるPHPを使用しています。

これを確認するには、ブラウザからphpinfo()を実行してphp -iコマンドラインで。 ApacheとCLIが同じPHPを使用している場合、結果はまったく同じである必要があります(同じ構成オプション、コンパイル時間、有効なライブラリなど)。

1
Czar

Webserver PHPがmod_phpとして実行されているとすると、最も可能性の高い2つの原因は次のとおりです。

1)php.iniファイルまたは.soファイルのアクセス許可により、Webサーバーのuidがファイルにアクセスすることはできません。

2)ウェブサーバーがchrootを実行している

これはPHP 'is_読み取り可能'を使用して簡単にテストできます。php.iniの場合はfile_get_contents()を使用して、ファイルに期待どおりのものが含まれていることを確認します。mysql.soの場合は、dl()を使用してファイルをロードします。

0
symcbean