【发布时间】: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