mer*_*ial 2 php apache zend-server-ce
我试图运行以下代码:
is_dir('~/tmp');
Run Code Online (Sandbox Code Playgroud)
在共享的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
Run Code Online (Sandbox Code Playgroud)
所以我认为我错过了什么,但是什么?
[编辑...]更多信息......
在我的本地运行以下
get_current_user()
Run Code Online (Sandbox Code Playgroud)
给我'用户名',这是我要验证的〜/ tmp目录的正确用户,但是
shell_exec('whoami')
Run Code Online (Sandbox Code Playgroud)
给了我'守护进程'.所以我想我知道我的问题来自哪里.现在我只需要弄清楚是否/如何更改在本地运行Web服务器的用户.
您是否希望~扩展到您的主目录?我不愿意依赖PHP内部.(刚刚在我的Mac上测试过,它没有扩展.)
如果可能,尝试更改~/tmp为完整路径名称(例如,类似的东西/Users/meriial/tmp).
更新:另外,您也可以替换~使用$_ENV['HOME'],如下所示:
is_dir($_ENV['HOME'] . '/tmp');
Run Code Online (Sandbox Code Playgroud)
理想情况下,您首先检查array_key_exists('HOME',$_ENV)返回TRUE并采取一些适当的操作(如使用系统临时目录),如果没有.
就这一点而言,正如@xmarcos指出的那样,无论使用sys_get_temp_dir()和,你都可以使用系统临时目录tempnam().这可能是最便携的,因此是您的最佳选择.我认为你也可以通过这种方式创建原子临时文件,因此它可能更安全,更不容易出现竞争条件.
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |