PHP:指定完整路径时,使用Apache Document Root为`include`d脚本打开路径


PHP: fopen path for `include`d script using Apache Document Root when full path is specified?

我正在尝试获取一个include d PHP脚本来写入文件,但路径没有按照我的意愿解析。这是一个场景:

正在运行的脚本(调用脚本)可以通过web访问。为了节省我的输入,说http://example.com/script1.php,example.com的Apache文档根绝对路径是/home/jweinberger/com.example/

我在/home/jweinberger/scripts/script2.php. 上找到了另一个脚本(绝对路径)

script1.php包含一个工作正常的include('/home/jweinberger/script2.php)

script2.php尝试fopen('/home/jweinberger/logs/script1.log'),但失败。错误消息显示它正在尝试打开:

/home/jweinberger/com.example/logs/script1.log//home/jweinberger/logs/script1.log

很明显,这是在准备调用脚本的Apache文档根,我不希望这样。

我已经完全指定了所有路径(根本没有相对路径)。safe_mode关闭,doc_root为空,php.ini中未设置cgi.force_redirect。这是PHP 5.2.17(由我的web主机提供-我无法控制升级)

而且,如果重要的话,script2.php在CLI脚本调用时成功地打开了正确的文件,而不是在CGI调用时。

有人能为我如何让script2.php成功打开正确的文件提供任何建议或指导吗?

我非常感谢。

如果路径以/开头,它将指向根文件系统,该系统可以使用CLI,但CGI可以这样理解:

/home/jweinberger/com.example/logs/script1.log//home/jweinberger/logs/script1.log

您应该使用$_SERVER数组中的索引'DOCUMENT_ROOT'

fopen($_SERVER['DOCUMENT_ROOT'].'/home/jweinberger/logs/script1.log') 

meda给了我线索,让我找到了答案。

我的错误在于构建文件名的方式。我在当前脚本名称前加了"/home/jweinberger/logs",这是错误的,因为当前脚本名称是完整路径。

当我改为使用basename(当前脚本名称)时,效果很好。

简单的监督。希望它能帮助这里的人