我正在尝试运行以下代码:
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
所以我认为我错过了什么,但是什么?
[edit ...]更多信息......
在我的本地
上运行以下内容get_current_user()
给我'用户名',这是我要验证的〜/ tmp目录的正确用户,但是
shell_exec('whoami')
给了我'守护进程'。所以我想我知道我的问题来自哪里。现在我只需要确定是否/如何更改在本地运行Web服务器的用户。
答案 0 :(得分:5)
您是否希望~
扩展到您的主目录?我不愿意依赖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()
,您都可以使用系统临时目录。这可能是最便携的,因此是您的最佳选择。我认为你也可以通过这种方式创建原子临时文件,因此它可能更安全,更不容易出现竞争条件。
答案 1 :(得分:2)
您确定该目录在您的用户目录中 吗?
转到Terminal
,然后输入cd ~/tmp
。有用吗?
更新:如果可以,您可以使用sys_get_temp_dir
代码示例:
$some_log = tempnam(sys_get_temp_dir(), 'some_log');
var_dump($some_log);
// will return '/private/var/folders/.../some_logbqzDvg'
答案 2 :(得分:1)
对于所有虚拟路径,首先尝试展开它们。做:
var_dump(realpath('~/tmp'));
然后看看会发生什么,
然后尝试opendir()
它,看看它得到了什么错误。