PHP, PEAR, and oci8 configuration


PHP, PEAR, and oci8 configuration

我会很快。

我在Fedora 19系统上安装了Oracle 11g(带有适当的数据库,用户等),Apache 2.4.6和PHP 5.5.4。

我想将PHP连接到Oracle。我真正想做的是下载MDB2_Driver_oci8,我认为这很容易,但在我做这样的事情之前,PHP 需要启用该插件,所以我做了:

  • 已尝试通过以下方式安装 oci8:pecl install oci8
  • 当前几次这并不完全有效时,我发现出于某种原因,我需要"开发工具" - 通过yum groupinstall "Development Tools"
  • 后来我发现PHP实际上不做oci8 - 它是PHP Devel。所以,我也必须通过yum install php-devel安装它。
  • 然后,我终于安装了oci8。它要求提供甲骨文目录,仅此而已。但它说了以下内容:
    Configuration option 'php_ini' is not set to php.ini location
    You should add 'extensions=oci8.so' to php.ini

首先,我做了一个locate oci8.so - 在/usr/lib64/php/modules/
中找到它其次,我添加了它告诉我的内容,到 php.ini 文件中。
第三,我检查了通常的 php_info() 测试页面 - 没有提到 OCI8。呃呃。
第四,运行 php - i 和 php -m 将 oci8 列为模块之一。奇怪。
无奈之下,我继续下载了MDB2_Driver_oci8。也许这会解决问题。不。

当我加载我的PHP网页时,它返回了以下内容:
错误消息:扩展 oci8 未编译为 PHP
以及:MDB2 错误:未找到

奇怪。然后我决定检查错误日志:
PHP 启动 - 无法加载动态库 '/usr/lib64/php/modules/oci8.so' - libclntsh.so.11.1:无法打开共享对象文件:第 0 行的未知中没有此类文件或目录

现在我被困住了。我尝试进入php.ini,发现extension_dir被注释掉了。我把它放回去,这似乎只会破坏东西。

注意事项:

  • 我按照这个(链接)指南来了解如何配置 PHP 和安装 oci8。
  • ./configure --with-oci8不起作用。Fedora 说没有这样的目录
  • 由于网页文件和实际服务器都驻留在同一台 PC 上,因此我没有安装 Oracle 客户端文件。
  • 默认情况下,extension_dir在 php.ini 中被注释掉。

这只是我关于复制已经存在但正在消亡的设置的一长串问题中的一个。似乎每当我想解决问题时,我必须先做X。通过做X,我发现了另一个问题,我必须通过做Y来解决,它有自己的问题,等等。

任何帮助将不胜感激。谢谢。

我知道这个问题有点旧 - 但我在这里写这篇文章是为了以防其他人来寻找解决方案。

PHP 扩展目录

要获取 PHP 扩展目录,请运行以下命令

php-config --extension-dir

甲骨文配置

当您运行 oracle 的 config 命令时,您需要为其提供您的 Oracle 主目录(这假设您已经安装了 ORACLE XE):

./configure -with-oci8=shared,$ORACLE_HOME/xe

SELinux 政策

您需要调整您的 SELinux 策略以支持您尝试实现的目标。不建议完全禁用它。

在你的 Fedora 系统上,尝试运行:

which audit2allow

如果您收到一个错误,指示它找不到audit2allow那么您需要安装此软件包:

yum install policycoreutils-python

拥有此包后,您可以将审核日志文件通过管道传递到audit2allow,以使其创建策略文件:

grep httpd /var/log/audit/audit.log | audit2allow -m httpd > http.te

这将创建人类可读的文件http.te,以便您查看它将对您的 SELinux 配置添加的策略。如果您对修改感到满意,请运行这些命令(请注意以下命令中的大写字母 M 与前面的小写字母 m)

grep httpd /var/log/audit/audit.log | audit2allow -M httpd
semodule -i httpd.pp

这可能需要几秒钟才能运行 - 您可以通过运行以下命令验证策略是否已安装:

semodule -l | grep httpd

您需要重新启动httpd,以便它可以尝试加载 oci8.so 插件

service httpd restart

在互联网上阅读了很多内容后,我发现了这个页面,这表明我应该禁用 SELinux,然后重新启动。

这就成功了。