在php中执行unix命令
在php中,我必须找到目录是否存在。如果不存在问题(我将使用dirname显示该文件的超链接) 这是我需要帮助的示例。在php中执行unix命令,php,Php,在php中,我必须找到目录是否存在。如果不存在问题(我将使用dirname显示该文件的超链接) 这是我需要帮助的示例。 dir_name是目录名 $url = system(~'ls -d /home/myapps/rel/".$dir_name"'); echo $url;(this does not work) if(preg_match("/No such/",$url)) { echo'Ther is no match'
dir_name是目录名
$url = system(~'ls -d /home/myapps/rel/".$dir_name"');
echo $url;(this does not work)
if(preg_match("/No such/",$url)) {
echo'Ther is no match'
}
else{
}
在我的代码中,从不执行if块(如果目录不存在,它应该执行);(为什么不使用
is_dir()
如果文件或目录存在,则返回true。如果您随后需要查找其目录或文件是否如其他人所说的那样使用了
is_dir()
,is_dir
是正确的方法
我将指出您现有的程序无法运行的原因。这在您希望运行外部命令然后解析其输出的情况下非常有用
- 您的通话中有一个不需要的
至~
系统
- 变量插值不适用
发生在单引号中。所以你需要
做一些类似于:
或system('ls-d/home/myapps/rel/.$dir\u name);
system(“ls-d/home/myapps/rel/$dir_name”);
- 即使有了以上的改变,它也能做到
不起作用,因为如果目录不起作用
存在,ls发出<代码>“…不存在
在
错误,但未在stderr上发现“
系统只返回 要修复的stdout
标准输出的最后一行 我们需要重定向的
将stderr
的命令设置为:stdout
system(“ls-d/home/myapps/rel/$dir_name 2>&1”);
- 你还需要记住这一点
仅返回最后一个 输出的行。在当前 案例if有效,但在其他情况下 如果外部命令 run会抛出多行错误/输出系统
将无法工作,您将 使用允许您 在一个文件中收集整个输出行 数组。类似于:系统
exec(“ls-d/home/myapps/rel/$dir\u name 2>&1,$output\u arr);
然后,您可以在数组$output\u arr
$url
中出现了错误消息(如果dir不存在),然后检查是否存在字符串“No-such”
该方法还有一些问题:
- bash抛出的一些实现
列出时会显示不同的错误消息
对于一个不存在的文件,我已经
看到的是未找到的
,这是 可能导致您的解决方案中断/foo/bar
- 如果
包含字符串$dir\u name
没有这样的
(奇怪 但可能)您的解决方案将 休息
~
在那里做什么?您似乎对单引号、双引号和变量插值也有错误的理解。
bool file_exists ( string $filename )