我刚刚意识到我在服务器上安装的 php rpm 版本不支持 sqlite(虽然它有 PDO 支持,但由于某种原因不起作用)
因此我将其安装为 PECL 扩展,现在它显示了对 phpinfo() 的支持,但是 open invitationr 脚本仍然给出以下错误:
调用未定义的函数 sqlite_open()
我已经重启了 httpd
有什么提示我可以在哪里找到解决方案或指南?
答案1
删除 php* 软件包并安装等效的 php53* 软件包 - 它们自 RHEL/CentOS 5.6 开始可用。它们开箱即用地支持 sqlite PDO。
你可以测试一下。创建一个文件/tmp/test-pdo-sqlite.php
,内容如下:
<?php
try {
$dbh=new PDO('sqlite:test.sqlite');
$version = $dbh->query('select sqlite_version()')->fetchColumn();
echo $version, "\n";
} catch (PDOException $e) {
trigger_error("Error!: " . $e->getMessage(),E_USER_ERROR);
}
?>
cd /tmp/; php test-pdo-sqlite.php
然后在装有 php53 的 CentOS 5 上运行它,我得到:
3.3.6
我安装了以下软件包:
$ rpm -qa --qf='%{NAME}\n' | grep php | sort
php53
php53-cli
php53-common
php53-gd
php53-mbstring
php53-mcrypt
php53-mysql
php53-pdo
答案2
在整个互联网上,您可以找到有关 Fedora Core、Red Hat 和 CentOS 发行版中 PHP 的 sqlite 支持的问题和答案。虽然其中许多问题在如何启用支持方面存在差异,但它们都对原因说了同一件事:这些发行版上的 PHP 软件包在编译时不支持 SQLite(据我所知,自 Fedora Core 4 以来,这些发行版中就没有内置 SQLite)。据我所知,目前没有可以轻松安装 php-sqlite3 的 RPM。
此外,不建议您安装 SQLite 的 PECL 扩展,因为已弃用并且不再受支持。
话虽如此,这些发行版上的 PHP 确实包含对 php-pdo 的支持,您可以使用它来访问 sqlite 数据库。主要区别在于连接字符串(您不使用 sqlite_open,而是使用 pdo 字符串 - 例如:) $db = new PDO('sqlite:/tmp/foo.db');
。以下是使用 PDO 的 sqlite 函数可以在 PHP 手册中找到。我相信,如果您修改代码以使用这些函数代替 php-sqlite 中的函数,您的问题将得到解决。
如果您需要 php-sqlite 支持,而 php-pdo 无法工作,您可以尝试以下步骤重新编译 php,使其支持 php-sqlite。从以下位置下载 PHP 源代码http://php.net/downloads.php并对其进行编译以支持 SQLite 模块。
tar xfvj php-5.3.2.tar.bz2
cd php-5.3.2/ext/sqlite/
phpize
./configure
make
make install
/etc/init.d/httpd restart