在php中执行unix命令

在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'

在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'
        }
        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
    包含字符串
    没有这样的
    (奇怪
    但可能)您的解决方案将
    休息

为什么不使用诸如is_dir等php函数。
~
在那里做什么?您似乎对单引号、双引号和变量插值也有错误的理解。
bool file_exists  ( string $filename  )