【发布时间】:2011-05-23 01:28:54
【问题描述】:
我正在尝试了解与在系统(Linux/OSX)上“安装”PHP 库相关的选项和术语
以下是我试图涵盖的一些具体要点:
- 在涉及 PHP 库时,“安装”是什么意思?
- 库和扩展有什么区别?
- php.ini 如何适应?
- PEAR 如何适应?
- 如何导入/包含库?
- 如果我创建自己的库,打包和分发它的最佳方式是什么?
感谢和抱歉多部分...
【问题讨论】:
标签: php installation pear
我正在尝试了解与在系统(Linux/OSX)上“安装”PHP 库相关的选项和术语
以下是我试图涵盖的一些具体要点:
感谢和抱歉多部分...
【问题讨论】:
标签: php installation pear
几点...
PHP 没有原生的“导入”基础架构,例如 python、java 或 .net。在 PHP 中可以通过多种方式使用库。
将它们编译成 PHP 二进制文件。这是最先进的方法,除非您有非常特殊的需要,否则通常不受欢迎。
将它们作为 PHP 模块安装在服务器上,并将它们包含在 PHP.ini 中。从 PHP 程序员的角度来看,这些扩展是 PHP 的一部分——始终可用。无需重新构建 PHP 本身即可更轻松地添加和删除它们。
在服务器上的某处安装 PHP 代码,并将其包含()到您的 PHP 脚本中。
将库的副本保存到您的项目中,并将其包含到您的 PHP 脚本中。
--
在基本层面上,代码要么是解释器的一部分(静态或动态),要么是包含()到您的项目中的普通旧 PHP 代码。
出于您的目的,我只能建议您坚持使用行业标准的 PHP 发行版(选择一个好的 linux 操作系统,并使用 PHP)。然后,您在解释器级别所需的几乎所有库都可以作为附加包提供,而其复杂性则留给那些每天都在这样做的人。
在 RedHat/Centos 上,您可能会运行:
yum install php php-memcached php-gd php-pecl
--
关于您可能想要使用的所有其他类型的库,最好采用一个很好的 PHP 框架来为您处理所有这些。
一些例子是:
(不按任何顺序,只是想到的)
如果您已采用标准方法使用 RPM 或类似方法来管理 PHP 和扩展方面的编译,那么一个良好的可靠框架将负责包含您需要的所有其他 PHP 库代码。
最终结果是,您专注于交付产品,而不是您必须学习和发明的所有基础架构。
--
php.ini 在 PHP 启动时被解析并运行(每次命令行,每个服务器在 apache 中启动一次)。它定义了很多设置,包含了很多模块,配置了这些模块等等......
您实际上可以使用 PHP 中的 ini_set() 函数覆盖 php.ini 中的一些设置。但是,这仅对某些设置有效。其他需要在您的脚本开始之前设置。
在 apache 下运行时,您可以在 .htaccess 和 <VirtualHost> 指令中添加行,这些指令完全覆盖该目录/虚拟主机的 PHP.ini。
(请更正我的语法,如有错误请删除此注释)
<VirtualHost *>
ServerName www.example.com
DocumentRoot /home/joe/site/docroot
php_value include_path "/home/joe/site/php-code"
</VirtualHost>
--
针对您关于您自己的库和打包它的最佳方式的第 6 个问题,我建议您首先评估库的需求。如果你真的在做某事,那么找出人们做这件事的最常见方式。如果它是一个简单的库,那么一个带有漂亮网站的 .php 文件就足够了。
--
也许有点漫无边际,但我希望这能为您指明正确的方向。
【讨论】:
所有与PHP直接相关的:
require(_once) 或include(_once)。对于类,您可以设置自动加载器。请参阅 PHP 手册。如果你想编写 PHP 库并想要一种简单的打包和分发方式,那就看看 PEAR。
【讨论】:
pear channel-discover mychannel.example.com和pear install mychannel.example.com/MyPackage。如果您没有频道服务器(谷歌为 pearfarm ;)),那么您还可以提供可下载的软件包。安装类似于pear install MyPackage-x.y.z.tgz(x.y.z 取决于包文件的版本)。要创建包,您必须编写一个package.xml(谷歌为“pear package.xml”;)),但是当它存在时,它只是一个简短的pear package 来创建一个新包,然后您可以将其上传到您的主机,或频道服务器。