从命令行,我可以得到这样的主目录:
~/
Run Code Online (Sandbox Code Playgroud)
如何在PHP CLI脚本中获取主目录?
#!/usr/bin/php
<?php
echo realpath(~/);
?>
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 65
使用 $_SERVER['HOME']
编辑:
要完成它,请查看print_r($_SERVER)从命令行执行的操作:
Array
(
[TERM_PROGRAM] => Apple_Terminal
[TERM] => xterm-color
[SHELL] => /bin/bash
[TMPDIR] => /var/folders/Lb/LbowO2ALEX4JTK2MXxLGd++++TI/-Tmp-/
[TERM_PROGRAM_VERSION] => 272
[USER] => felix
[COMMAND_MODE] => unix2003
[__CF_USER_TEXT_ENCODING] => 0x1F5:0:0
[PATH] =>/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin
[PWD] => /Users/felix/Desktop
[LANG] => de_DE.UTF-8
[SHLVL] => 1
[HOME] => /Users/felix
[LOGNAME] => felix
[DISPLAY] => /tmp/launch-XIM6c8/:0
[_] => ./test_php2
[OLDPWD] => /Users/felix
[PHP_SELF] => ./test_php2
[SCRIPT_NAME] => ./test_php2
[SCRIPT_FILENAME] => ./test_php2
[PATH_TRANSLATED] => ./test_php2
[DOCUMENT_ROOT] =>
[REQUEST_TIME] => 1260658268
[argv] => Array
(
[0] => ./test_php2
)
[argc] => 1
)
Run Code Online (Sandbox Code Playgroud)
我希望我不公开相关的安全信息;)
请注意,$_SERVER['HOME']Windows上不可用.而是将变量拆分为$_SERVER['HOMEDRIVE']和$_SERVER['HOMEPATH'].
EJ *_*ell 53
您可以从环境中获取$ HOME的值:
<?php
$home = getenv("HOME");
?>
Run Code Online (Sandbox Code Playgroud)
PHP允许您获取任何OS用户的主目录.有两种方法.
方法#1:
首先,你必须找出操作系统用户ID并将其存储在某处(例如数据库或配置文件).
// Obviously this gotta be ran by the user which the home dir
// folder is needed.
$uid = posix_getuid();
Run Code Online (Sandbox Code Playgroud)
只要您传递先前收集的正确目标用户ID,此代码位就可以由任何操作系统用户运行,即使是通常的网络服务器www-data用户也可以运行.
$shell_user = posix_getpwuid($uid);
print_r($shell_user); // will show an array and key 'dir' is the home dir
// not owner of running script process but script file owner
$home_dir = posix_getpwuid(getmyuid())['dir'];
var_dump($home_dir);
Run Code Online (Sandbox Code Playgroud)
方法#2:
与posix_getpwuid()相同的逻辑.在这里你必须传递目标OS用户名而不是他们的uid.
$shell_user = posix_getpwnam('johndoe');
print_r($shell_user); // will show an array and key 'dir' is the home dir
// not owner of running script process but script file owner
$home_dir = posix_getpwnam(get_current_user())['dir'];
var_dump($home_dir);
Run Code Online (Sandbox Code Playgroud)
此功能取自Drush项目.
/**
* Return the user's home directory.
*/
function drush_server_home() {
// Cannot use $_SERVER superglobal since that's empty during UnitUnishTestCase
// getenv('HOME') isn't set on Windows and generates a Notice.
$home = getenv('HOME');
if (!empty($home)) {
// home should never end with a trailing slash.
$home = rtrim($home, '/');
}
elseif (!empty($_SERVER['HOMEDRIVE']) && !empty($_SERVER['HOMEPATH'])) {
// home on windows
$home = $_SERVER['HOMEDRIVE'] . $_SERVER['HOMEPATH'];
// If HOMEPATH is a root directory the path can end with a slash. Make sure
// that doesn't happen.
$home = rtrim($home, '\\/');
}
return empty($home) ? NULL : $home;
}
Run Code Online (Sandbox Code Playgroud)
如果由于任何原因getenv('HOME')无法正常工作,或者服务器操作系统是 Windows,您可以使用exec("echo ~")或exec("echo %userprofile%")来获取用户目录。当然,该exec功能必须可用(一些托管公司出于安全原因禁用此类功能,但这种情况不太可能发生)。
下面是一个php函数,它会尝试$_SERVER,getenv最后检查该exec函数是否存在并使用相应的系统命令获取用户目录:
function homeDir()
{
if(isset($_SERVER['HOME'])) {
$result = $_SERVER['HOME'];
} else {
$result = getenv("HOME");
}
if(empty($result) && function_exists('exec')) {
if(strncasecmp(PHP_OS, 'WIN', 3) === 0) {
$result = exec("echo %userprofile%");
} else {
$result = exec("echo ~");
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64785 次 |
| 最近记录: |