-2

我正在制作一个 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>"; 
        } 


    }       
}     
?>

它给了我循环中每次迭代的警告。我ve trying to fix it but I can吨。有人可以帮我吗?

4

2 回答 2

0

你没有对这个问题做足够的研究。

$buscar = "arica"; 

我猜是你的模式。我在这里看不到任何正则表达式,但它需要有分隔符。

来自php手册:

使用 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();

于 2013-07-02T08:36:26.537 回答
0

该错误是由preg_match($buscar, $elemento). 该调用成功或失败取决于 的值$buscar是什么。但是,$buscar来自用户,因为

$busqueda=$_POST['busqueda'] ;
$buscar = $busqueda;

首先,没有多少用户能够制定正则表达式,因此向用户询问正则表达式可能不是一个好主意。我不知道您是否打算这样做,因为该变量$buscar以前被定义为$buscar = "arica"(将相同的变量用于不同的目的不是一个好主意,它会使开发人员感到困惑。)

其次,作为模式传递给的字符串preg_match()必须包含分隔符。我不知道ain是否$buscar = "arica"是一个有效的分隔符,它肯定是一个不寻常的分隔符(通常,/被选为分隔符,但其他人也可以)。所以应该是

$buscar = "/arica/";

但请注意/arica/,由于我之前所说的,它不会被用作正则表达式。

于 2013-07-02T08:37:04.203 回答