从命令行,我可以得到这样的主目录:
~/
如何在PHP CLI脚本中获取主目录?
#!/usr/bin/php
<?php
echo realpath(~/);
?>
答案 0 :(得分:64)
使用$_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
)
我希望我不公开相关的安全信息;)
请注意,$_SERVER['HOME']
在Windows上不可用。相反,变量分为$_SERVER['HOMEDRIVE']
和$_SERVER['HOMEPATH']
。
答案 1 :(得分:50)
您可以从环境中获取$ HOME的值:
<?php
$home = getenv("HOME");
?>
答案 2 :(得分:6)
此功能取自Drush project。
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.SwingUtilities;
public class MainScreen2 extends Panel {
private static final int PREF_W = 500;
private static final int PREF_H = 500;
public MainScreen2() {
Panel bottomPanel = new Panel(new GridLayout(0, 1));
bottomPanel.add(new Button("Start Game"));
bottomPanel.add(new Button("How To Play"));
bottomPanel.add(new Button("Settings"));
bottomPanel.add(new Button("About"));
setLayout(new BorderLayout());
add(bottomPanel, BorderLayout.PAGE_END);
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private static void createAndShowGui() {
Frame frame = new Frame("MainScreen2");
frame.add(new MainScreen2());
frame.pack();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
super.windowClosed(e);
System.exit(0);
}
});
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
答案 3 :(得分:5)
PHP允许您获取任何OS用户的主目录。有两种方式。
方法#1:
首先,你必须找出操作系统用户ID并将其存储在某处(例如数据库或配置文件)。
// Obviously this gotta be ran by the user which the home dir
// folder is needed.
$uid = posix_getuid();
只要您传递之前收集的正确目标用户ID,此代码位就可以由任何操作系统用户运行,即使是通常的网络服务器www-data用户。
$shell_user = posix_getpwuid($uid);
print_r($shell_user);
方法#2:
与posix_getpwuid()相同的逻辑。在这里你必须传递目标OS用户名而不是他们的uid。
$shell_user = posix_getpwnam('johndoe');
print_r($shell_user);
$home_dir = posix_getpwnam(get_current_user())['dir'];
var_dump($home_dir);
答案 4 :(得分:2)
如果由于任何原因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;
}
答案 5 :(得分:1)
取决于您的位置以及您想要做的事情。
对于非服务器脚本, $_SERVER
完全不可靠,但对于标准shell脚本,$_ENV['HOME']
可能更好。您可以随时print_r( $GLOBALS )
查看您的环境为您提供的服务。从CLI脚本调用时,phpinfo()
也会吐出plaintxt,而从shell执行的良好的php -i
也会执行相同的操作。
答案 6 :(得分:0)
这是我在最近的项目中使用的方法:
exec('echo $HOME')
我通过这样做将它保存到我的对象中:
$this->write_Path = exec('echo $HOME');
但是你可以用你想要的任何方式保存它,无论如何你都认为合适。
答案 7 :(得分:0)
这对LINUX和WINDOWS都适用:
function get_home_path() {
$p1 = $_SERVER['HOME'] ?? null; // linux path
$p2 = $_SERVER['HOMEDRIVE'] ?? null; // win disk
$p3 = $_SERVER['HOMEPATH'] ?? null; // win path
return $p1.$p2.$p3;
}
答案 8 :(得分:0)
我知道这是一个古老的问题,但是如果您正在寻找一种跨应用程序且易于复制的方法,则可以考虑使用通过composer安装的库。我已经编写了一个库,将这里的一些答案组合在一起,并使其成为一个库,我将在这里无耻地推广它:juliardi/homedir。
您可以通过composer安装它:
$ composer require juliardi/homedir
然后在您的应用程序中使用它:
<?php
require_once('vendor/autoload.php');
$userHomeDir = get_home_directory();
希望这个答案对您有所帮助。
答案 9 :(得分:-1)
使用Web服务器时,您可以依赖“主”目录。如果您想让脚本在Web和cli环境中工作,那么可以使用CLI来提供用户路径(在Windows中),我发现最好使用dirname升至您的根目录(主目录)。
echo dirname(__DIR__).PHP_EOL; // one level up
echo dirname(dirname(__DIR__)); //two levels up
echo dirname(__DIR__,2).PHP_EOL; //two levels only php >7.0
答案 10 :(得分:-6)
$ _ SERVER ['HOME']和getenv('home')对我不起作用。
但是,在PHP 5.5+上,这可以提供该文件所在的主目录:
explode( '/', __FILE__ )[2]
答案 11 :(得分:-10)
尝试$_SERVER['DOCUMENT_ROOT']
作为您的主目录。
答案 12 :(得分:-13)
dirname(__DIR__);