我正在创建一个php文件来搜索引入该名称的目录中的图像,但是函数preg_match会返回这个错误:“警告:preg_match():分隔符不能是字母数字或反斜杠”。代码是这样的:
<?php
$ruta='fotos';
// Usamos dir
$dir=dir($ruta);
// Archivo a Buscar
$busqueda=$_POST['busqueda'] ;
$buscar = $busqueda;
// Recorremos los Archivos del Directorio
while ($elemento = $dir->read())
{
// Evitamos el . y ...
if ( ($elemento != '.') and ($elemento != '..'))
{
// Vemos si Existe el Archivo
if (preg_match($buscar, $elemento) AND is_file($ruta.$elemento) )
{
echo " Archivo : $elemento <br>";
}
}
}
?>
它为循环中的每次迭代提供了警告。 I ve trying to fix it but I can
吨。请问有人帮帮我吗?
答案 0 :(得分:0)
你对这个问题没有做足够的研究。
$buscar = "arica";
我的猜测是你的模式。我在这里看不到任何正则表达式,但是它需要有分隔符。
使用PCRE功能时,要求图案由分隔符包围。分隔符可以是任何非字母数字,非反斜杠,非空白字符。
经常使用的分隔符是正斜杠(/),哈希符号(#)和波浪号(〜)。以下是有效分隔模式的所有示例。
所以你需要使用一个分隔符,例如
$buscar = "/arica/";
但是在你的情况下删除preg_match()并简单地使用
$buscar == $elemento
它也会这样做。
Morover,你应该考虑使用DirectoryIterator。有了它,您可以将代码更改为
$ruta='fotos';
$busqueda=$_POST['busqueda']
$iterator = new DirectoryIterator($ruta);
foreach ($iterator as $fileinfo) {
if ($fileinfo->isFile() && $fileinfo->getFileName() == $busqueda) {
echo " Archivo : $elemento <br>"; // here can be added 'break' I guess there is only 1 file with name you search for.
}
}
我不知道你想要实现什么,但也许你应该使用file_exists();
答案 1 :(得分:0)
错误是由preg_match($buscar, $elemento)
引起的。该调用成功或失败取决于$buscar
的值。但是,由于
$buscar
来自用户
$busqueda=$_POST['busqueda'] ;
$buscar = $busqueda;
首先,没有多少用户能够制定正则表达式,因此向用户询问正则表达式可能不是一个好主意。我不知道你是否打算这样做,因为变量$buscar
之前被定义为$buscar = "arica"
(为不同的目的重用同一个变量不是一个好主意,它会让开发人员感到困惑。)< / p>
其次,作为模式传递给preg_match()
的字符串必须包含分隔符。我不知道a
中的$buscar = "arica"
是否是一个有效的分隔符,它肯定是一个不常见的分隔符(通常,/
被选为分隔符,但其他人也可以工作)。所以它应该是
$buscar = "/arica/";
但请注意/arica/
不会被用作正则表达式,因为我之前说过。