【问题标题】:Issue with using wildcards in php glob()在 php glob() 中使用通配符的问题
【发布时间】:2016-04-19 22:31:15
【问题描述】:

PHP glob() 发生了一个奇怪的情况,想知道是否有人遇到过。这个问题在这里可能过于宽泛,但无论如何都要尝试。

我正在运行以下命令:

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:        14.04
Codename:       trusty

PHP 5.6.20-1+deb.sury.org~trusty+1 (cli) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans

我的 glob 函数在使用之前可以正常工作:

$images = glob($path . '/' . $id .'.*');

然后它突然停止工作。我并没有真正改变服务器或任何其他代码中的任何内容。这些是我尝试过的不同的事情,只是为了看看会发生什么

$images = glob($path . '/' . $id . '.{jpg,jpeg,png,gif}', GLOB_BRACE); //works
$images = glob($path . '/*.jpg'); // doesn't work 
$images = glob($path . '/*'); // doesn't work

基本上,无论何时我使用通配符,无论位置如何,脚本(从命令行运行)都将坐在那里。没有错误,没有返回,什么都没有。我什至尝试使用 GlobIterator 获得相同的结果。

我已经尝试卸载并重新安装 PHP,创建了一个包含一些临时文件的新目录来执行测试,但我所做的一切似乎都无法让它再次工作。目录中大约有 1000 个文件,因此需要很长时间才能匹配(我已经让它坐了一个小时)。

所以,想知道是否有人以前遇到过这个问题,或者可能知道解决方案?这主要是出于好奇,因为我已经在某些需要通配符的地方重写了不使用 glob() 的代码。

更新 2 它又在做。使用通配符时挂起。我进行了以下测试:

// not working
    var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/*'));
    // not working
    var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/*.jpg'));
    // not working
    var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/*.{jpg,jpeg,gif,png,tif,tiff}', GLOB_BRACE));
    // not working
    var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/5715116ac46988ff1a8b4b8f.*'));
    // working
    var_dump(glob('/vagrant/biospex-2.0/storage/scratch/1-8c6b410c42da62d37e7aabc00a61e258/5715116ac46988ff1a8b4b8f.jpg'));

更新 3 在我的目录中有 1100 张图片。我发现当我将该数字减少到 712 时,glob 返回数组。再添加一张图片,总共 713 张,使其挂起。两者的大小差异分别为 1.62GB 和 1.63GB。我尝试更改 PHP 设置,但没有任何效果。 我在目录中添加了一个小 txt 文件,但它仍然挂起。所以不太确定这里发生了什么。 我还应该提到这是在带有共享文件夹的 Windows 机器上托管的 Virtualbox 上使用 Ubuntu。 现在,我只是打算使用一个迭代器。

【问题讨论】:

  • 您是否尝试输出$path . '/*'$path . '/*.jpg' 以查看它会变成什么并尝试手动匹配(在ls 在bash 中或其他东西中)?
  • 这很奇怪。 $path 是什么?它有什么特别奇怪的地方吗,比如包含星号之类的?
  • 我看到的所有不同之处在于那些不起作用的不包含$id
  • @MaximKhan-Magomedov - 你能再解释一下吗?
  • @Chris - $path 是根目录的完整路径。 /vagrant/biospex-2.0/storage/scratch 我也尝试过简单地使用 /vagrant/test 但它不起作用

标签: php ubuntu-14.04 glob


【解决方案1】:

不是一个真正的解决方案,但我最终从头开始重建我的本地开发服务器。 glob() 函数在那之后开始工作。所以,一定是发生了什么事情把事情搞砸了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多