0

我正在尝试让included PHP 脚本写入文件,但路径没有按我的意愿解析。这是场景:

正在运行的脚本(调用脚本)可通过网络访问。为了节省我的打字时间,http://example.com/script1.phpexample.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 为空且 cgi.force_redirect 未在 php.ini 中设置。这是PHP 5.2.17(由我的网络主机提供 - 我无法控制升级)

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

任何人都可以就我可以做些什么来让 script2.php 成功打开正确的文件提供任何建议或指导吗?

我将非常感激。

4

2 回答 2

0

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

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

当我改用 basename(current script name) 时,它工作得很好。

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

于 2013-08-09T16:01:26.800 回答
0

如果路径以/It 开头,它将指向根文件系统,这对 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') 
于 2013-08-05T01:14:47.370 回答