【问题标题】:Glob doesn't return resultsGlob 不返回结果
【发布时间】:2023-11-24 07:01:01
【问题描述】:

我可能做错了什么,但我找不到。

这是有效的代码:

foreach (glob('uploads/'.$userid.'[*') as $file)
{
  echo $file."<br>";
}

这是我试图让它工作但它没有:

foreach (glob('uploads/'.$userid.'[?]('.$id.')*') as $file)
{
  echo $file."<br>";
}

一些文件示例:

uploads/24[3](30) Random name.pdf
uploads/24[1](114) Random name.pdf
uploads/24[2](55) Random name.doc
etc etc

基本上:UserID[1-3](ID) name of the file

【问题讨论】:

  • 放一些你的文件结构和文件名的样本。
  • @hassan 我已经更新了这个问题。谢谢
  • 你如何定义你的$id变量?
  • userid 和 id 都直接取自数据库。问题是即使我把它写成glob('uploads/'.$userid.'[3](*') 它仍然不起作用:/

标签: php glob


【解决方案1】:

全局函数:

glob() 函数搜索所有匹配模式的路径名 根据 libc glob() 函数使用的规则,即 类似于普通shell使用的规则

您需要按如下方式转义括号和括号:

foreach (glob('uploads/'.$userid.'\[?\]\(' . $id . '\)*') as $file) {
    echo $file."<br />";
}

【讨论】:

  • 我刚刚尝试过,但它仍然没有返回任何内容:/
  • 我这边:root@hassan:/var/www/# php list.php 输出:uploads/24[1](114) Random name.pdf uploads/24[2](55) Random name.doc uploads/24[3](30) Random name.pdf
  • 试试这个glob('uploads/'.$userid.'\[?\]\(*\)*',我相信它会正常工作,也许是你的变量的问题,打印出来看看
  • 我从字面上复制粘贴并没有打印出任何结果:(
  • 那么'uploads/'.$userid.'\[*\]\(' . $id . '\)*'