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と同じように構成が含まれているのに、なぜ動作しないのですか?
どうもありがとう!
これはおそらく構成の問題ではありません。私はDebianで物事がどのように行われるか(PHPのアップグレード/ダウングレードに関して)に精通していませんが、Apacheで使用されるPHPとPHP CLI実際、異なるPHPを使用しています。
これを確認するには、ブラウザからphpinfo()
を実行してphp -i
コマンドラインで。 ApacheとCLIが同じPHPを使用している場合、結果はまったく同じである必要があります(同じ構成オプション、コンパイル時間、有効なライブラリなど)。
Webserver PHPがmod_phpとして実行されているとすると、最も可能性の高い2つの原因は次のとおりです。
1)php.iniファイルまたは.soファイルのアクセス許可により、Webサーバーのuidがファイルにアクセスすることはできません。
2)ウェブサーバーがchrootを実行している
これはPHP 'is_読み取り可能'を使用して簡単にテストできます。php.iniの場合はfile_get_contents()を使用して、ファイルに期待どおりのものが含まれていることを確認します。mysql.soの場合は、dl()を使用してファイルをロードします。