gpt4 book ai didi

php - 使用 php is_dir ('~/tmp' ) 在一台机器上工作,但在另一台机器上不工作。为什么?

转载 作者:行者123 更新时间:2023-12-02 07:09:00 26 4
gpt4 key购买 nike

我正在尝试运行以下代码:

is_dir('~/tmp');

在共享的 LAMP 堆栈上。它工作正常,并返回 TRUE。 (该目录存在。)当我在我的本地机器(Mac OSX 10.5,运行 Zend Server Community Ed)上运行相同的代码时,我得到 FALSE,这是错误的,因为 ~/tmp 存在并且权限设置为 777。

我想我在某处缺少服务器指令。

我已经检查过 phpInfo 并且我有(本地和生产):

safe_mode           Off         Off

safe_mode_exec_dir no value no value

safe_mode_gid Off Off

safe_mode_include_dir no value no value

open_basedir no value no value

所以我认为我遗漏了什么,但是什么?

[编辑...] 更多信息...

在本地运行以下命令

get_current_user()

给我“用户名”,这是我要验证其 ~/tmp 目录的正确用户,但是

shell_exec('whoami')

给我“守护进程”。所以我想我知道我的问题出在哪里。现在我只需要弄清楚是否/如何更改在本地运行 Web 服务器的用户。

最佳答案

您希望 ~ 扩展到您的主目录吗?我不愿意依赖 PHP 内部的那个。 (刚刚在我的 Mac 上测试过,并没有展开。)

如果可能,请尝试将 ~/tmp 更改为完整路径名(例如,/Users/meriial/tmp)。

更新:或者,您可以将 ~ 替换为 $_ENV['HOME'],如下所示:

is_dir($_ENV['HOME'] . '/tmp');

理想情况下,您应该首先检查 array_key_exists('HOME',$_ENV) 是否返回 TRUE 并采取一些适当的措施(例如使用系统临时目录)如果它没有。

就此而言,正如@xmarcos 指出的那样,您可以只使用系统临时目录,而不管使用 sys_get_temp_dir()tempnam()。这可能是最便携的,因此是您的最佳选择。我认为您也可以通过这种方式创建原子临时文件,因此它可能更安全并且更不容易出现竞争条件。

关于php - 使用 php is_dir ('~/tmp' ) 在一台机器上工作,但在另一台机器上不工作。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com