在共享的php.ini文件中设置include_path

时间:2009-12-13 20:12:18

标签: php

我有2台Mac,我希望保持同步的一般配置。对于Apache和PHP,我将conf文件(分别是httpd.conf和php.ini)存储在我的Dropbox(~/Dropbox/config)中,并使用符号链接从预期位置引用共享。

同样,我以相同的方式分享了几个代码库。物理文件位于~/Dropbox/Development并链接到~/Development/。现在我需要共享一个实用程序类库,我无法弄清楚如何做到这一点。问题是,每个播放目录都位于我的主目录中,并且每台计算机上的用户名都不同。一方面,它是~/rwilkerson而另一方是~/rob

如何让我的php.ini来解决这个问题?在我的httpd.conf中,我是通过使用环境变量完成的。例如,在虚拟主机配置文件中,我可以将我的Web根目录设置为/Users/${SUDO_USER}/path/to/webroot。由于我使用sudo重启Apache(sudo apachectl restart),因此环境变量会在我所在的任何一台机器上评估为正确的用户名。

据我所知,我不能以类似的方式在我的php.ini中使用变量。我认为如果我只在我的include_path中包含两个路径,PHP就会忽略给定计算机上不存在的路径,但事实并非如此。只有在错误路径之前出现正确路径时,才会包含我的共享库。

我找不到任何能够说明include_path指令如何工作的细微差别的资源,所以我无法找到解决这个明显限制的方法。有人有什么想法吗?

答案:

我最终使用了StasM的解决方案#1。在我的httpd.conf文件中(也是共享的),我添加了:

php_value include_path "/opt/local/lib/php:${HOME}/Dropbox/Development/lib/php/classes"

这样做可以覆盖php.ini中的任何值并且工作得很漂亮。

2 个答案:

答案 0 :(得分:1)

我也开发了几台机器(所有的mac),让我保持一切同步的最简单方法是git,dropbox和zend_config。

我有一个父git目录,/ git然后每个项目/git / projecta / git / projectb。这样你就不会处理$ HOME或〜/

的问题

我所做的任何更改都会推送到Dropbox,并且它会在所有计算机上实时同步。

使用zend_config,我通常存储在/etc/projecta.ini中的每个项目都有一个配置文件。这将指向外部库,db params等。

就共享库而言,我尝试让每个项目都拥有所有依赖项。每个项目都是应用程序,html / public,library。而库文件夹将有pear,zend等推进。

就include_path问题而言,为什么不将它存储在所有机器的公共目录中。 / usr / local / lib / php用于所有库,然后将其符号链接到dropbox并对所有项目执行相同操作。然后在你的应用程序中将include_path设置为/ usr / local / lib / php或在php.ini中设置它。

答案 1 :(得分:1)

include_path应该忽略不存在的目录。但除此之外,你可以做一个:

  1. 使用httpd.conf通过include_path指令设置php_value
  2. 如果您使用user_ini.filename
  3. 运行5.3
  4. 使用auto_prepend_file包含一个脚本,该脚本将计算正确的包含路径,并在每个其他脚本之前使用set_include_path()进行设置。