繁体   English   中英

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

[英]Issue with using wildcards in php 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。 现在,我只想使用迭代器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM