我正在尝试使用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成功打开正确的文件吗?
我非常感谢。
答案 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)
我的错误是我构建文件名的方式。我正在将“/ home / jweinberger / logs”添加到当前脚本名称,这是错误的,因为当前脚本名称是完整路径。
当我使用basename(当前脚本名称)时,它工作正常。
简单的疏忽。希望它可以帮到这里的人