所以我有以下路径:/my_user/path/to/dir
,当我将其传递给file_exists()
时,它可以正常工作。
但是,当我将其更改为~username/path/to/dir
时,它将返回false。
realpath("~username/path/to/dir")
也返回false。
有什么问题吗?
注意:这不是How to get the home directory from a PHP CLI script?的副本,因为我更好奇为什么波浪线不起作用,而不是如何变通。
答案 0 :(得分:1)
波浪扩展是shell的功能,因此无法在shell(或开发人员已选择实现该shell功能的其他程序)的上下文之外使用它,因为它不是文件系统或任何其他文件固有的操作系统的一部分。
该行为在section 2.6.1 of the POSIX specification中定义。该章的导言指出:
shell是命令语言解释器。本章描述了
sh
实用程序以及POSIX.1-2017的系统接口卷中定义的system()
和popen()
函数所使用的命令语言的语法。>
如果要使用这样的文件名,可以使用PHP的一些内置函数来扩展它:
<?php
$dir = "~username/bar/baz/";
$dirparts = explode("/", $dir);
array_walk(
$dirparts,
function(&$v, $k) {
if ($v[0] ?? "" === "~") $v = posix_getpwnam(substr($v, 1))["dir"] ?? $v;
}
);
$expanded = implode("/", $dirparts);
echo $expanded;
答案 1 :(得分:0)
$home_dir = exec( 'echo ~' ) ;