繁体   English   中英

如何让windows符号链接与mod_php一起使用?

[英]How to make windows symlinks work with mod_php?

我试图在PHP中使用Windows 7上的符号链接。 我从常规用户帐户(非管理员)运行Apache 2.4.10和PHP 5.5.15的XAMPP。 正如Symlink中的建议不能在我的本地机器上工作,我设置了正确的权限,以便我的用户创建符号链接。 这工作正常,我能够mklink ...创建符号链接( mklink ... ),没有提升。 PHP的symlink()函数不会抛出任何权限(代码1314)错误。

从命令行运行PHP或通过CGI加载它时,一切都按预期工作:

  • symlink()能够创建符号链接(绝对和相对
    目标路径)
  • is_link()为符号链接返回true
  • filetype()返回符号链接的“链接”

但是,当我将PHP作为apache模块运行时,我遇到了各种各样的麻烦:

  • symlink()只能创建符号链接,当target是有效的绝对路径时(使用相对路径将抛出: Warning: symlink(): Could not fetch file information(error 2)
  • is_link()为符号链接返回false
  • filetype()为符号链接返回'file'/'dir'

这似乎与PHP symlink()在Windows 7上失败有关 ,但该错误已在PHP 5.4中修复,我使用的是5.5。 PHP也报告错误代码2,而不是3。

除了我的主要问题(“ 如何使这项工作? ”),我正在寻找以下问题的答案:

  1. 这是PHP(或Apache?)中的另一个错误吗?

  2. 加载PHP作为一个模块和通过CGI有什么区别?这与这件事有什么关系?

在阅读PHP中的线程安全性之后

  1. 线程安全可以与此有关吗?

我可以说mod_php现在被加载为线程安全版本(“phpt5 ts .dll”)。

这是httpd.conf中用于加载为模块的部分(默认xampp设置):

LoadFile "G:/xampp/php/php5ts.dll"
LoadFile "G:/xampp/php/libpq.dll"
LoadModule php5_module "G:/xampp/php/php5apache2_4.dll"

<FilesMatch "\.php$">
   SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

这是php-cgi设置:

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php-cgi
</FilesMatch>
<IfModule actions_module>
    Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
</IfModule>

symlink()只能创建符号链接,当target是有效的绝对路径时(使用相对路径将抛出:警告:symlink():无法获取文件信息(错误2))

这是由于PHP中的以下错误:

is_link()为符号链接返回false

我注意到了同样的事情,至少在我目前的设置下。 当PHP作为Apache模块而不是通过CGI运行时,对于任何符号链接, is_link函数总是返回false。 我的设置是:

  • Windows 7 x64
  • XAMPP 1.8.3
  • PHP 5.5.11

加载PHP作为一个模块和通过CGI有什么区别?这与这件事有什么关系?

通过CGI运行PHP的优点是,每个PHP进程可以在不同的用户下运行,而不仅仅是在Apache运行的用户下运行。 这对于高效的服务器环境很有用,因此每个网站不需要具有相同的访问权限。 但是,通过CGI运行PHP也要慢得多。 将其作为模块运行始终是最快的选择。

通过FastCGI运行PHP可以缓解大多数情况下的性能下降,但它仍然比将其作为模块运行慢一点。

至于为什么在运行PHP作为模块时出现is_link (和filetype )这些问题,我不知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM