在php glob()中使用通配符的问题

时间:2016-04-19 22:31:16

标签: php ubuntu-14.04 glob

我在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。 现在,我只是想使用迭代器。

1 个答案:

答案 0 :(得分:0)

不是真正的解决方案,但我最终从头开始重建我的本地开发服务器。之后glob()函数开始工作。所以,必须发生一些让事情变得混乱的事情。