在 php glob() 中使用通配符的问题
Issue with using wildcards in php glob()
我遇到了 PHP glob() 的 st运行ge 情况,想知道是否有人遇到过它。这个问题可能对这里来说太宽泛了,但无论如何都要尝试一下。
我运行宁以下:
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
基本上,只要我使用通配符,无论位置如何,脚本(来自命令行的运行)就在那里。没有错误,没有 return,什么都没有。我什至尝试使用 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 returns 数组。再添加一张图像,总共 713 张,使其挂起。两者的大小分别相差1.62GB和1.63GB。我尝试更改 PHP 设置,但没有效果。
我在目录中添加了一个小的txt文件,它仍然挂了。所以不太确定这里发生了什么。
我还应该提到这是在 Windows 机器上托管的带有共享文件夹的 Virtualbox 上使用 Ubuntu。
现在,我只想使用迭代器。
不是真正的解决方案,但我最终从头开始重建我的本地开发服务器。 glob() 函数在那之后开始工作。所以,一定是出了什么事把事情搞砸了。
我遇到了 PHP glob() 的 st运行ge 情况,想知道是否有人遇到过它。这个问题可能对这里来说太宽泛了,但无论如何都要尝试一下。
我运行宁以下:
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
基本上,只要我使用通配符,无论位置如何,脚本(来自命令行的运行)就在那里。没有错误,没有 return,什么都没有。我什至尝试使用 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 returns 数组。再添加一张图像,总共 713 张,使其挂起。两者的大小分别相差1.62GB和1.63GB。我尝试更改 PHP 设置,但没有效果。 我在目录中添加了一个小的txt文件,它仍然挂了。所以不太确定这里发生了什么。 我还应该提到这是在 Windows 机器上托管的带有共享文件夹的 Virtualbox 上使用 Ubuntu。 现在,我只想使用迭代器。
不是真正的解决方案,但我最终从头开始重建我的本地开发服务器。 glob() 函数在那之后开始工作。所以,一定是出了什么事把事情搞砸了。