PHP:指定完整路径时使用Apache Document Root的`include`d脚本的fopen路径?

时间:2013-08-03 22:47:22

标签: php path cgi fopen absolute

我正在尝试使用include个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(由我的网络主机提供 - 我无法控制升级)

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

有人可以提供任何建议或指示,以便我们能够让script2.php成功打开正确的文件吗?

我非常感谢。

2 个答案:

答案 0 :(得分:0)

如果路径以/开头,它将指向根文件系统,这对CLI来说很好,但CGI会这样理解它:

  

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

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

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

答案 1 :(得分:0)

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

我的错误是我构建文件名的方式。我正在将“/ home / jweinberger / logs”添加到当前脚本名称,这是错误的,因为当前脚本名称是完整路径。

当我使用basename(当前脚本名称)时,它工作正常。

简单的疏忽。希望它可以帮到这里的人