Php 为/while删除多个文件

Php 为/while删除多个文件,php,Php,我有一个php下拉菜单,我选择一个项目并删除它 与之关联的所有文件 如果只有5个或6个,效果会很好。在我把 第一个4测试并使其工作,我意识到它可以 要花很长时间才能进入几百个国家 会弄脏剧本 对for和while循环了解不够 有人能帮上忙吗 一次删除的集不会超过一个 提前谢谢 <?php $workitem = $_POST["workitem"]; $workdirPAth = "/var/work.files/"; if($workitem == 'item1.php') {

我有一个php下拉菜单,我选择一个项目并删除它 与之关联的所有文件

如果只有5个或6个,效果会很好。在我把 第一个4测试并使其工作,我意识到它可以 要花很长时间才能进入几百个国家 会弄脏剧本

对for和while循环了解不够 有人能帮上忙吗

一次删除的集不会超过一个

提前谢谢

<?php

$workitem = $_POST["workitem"];
$workdirPAth = "/var/work.files/";


if($workitem == 'item1.php')
{
  unlink("$workdirPath/page1.php");
  unlink("$workdirPath/temp1.php");
  unlink("$workdirPath/all1.php");
}
if($workitem == 'item2.php')
{
  unlink("$workdirPath/page2.php");
  unlink("$workdirPath/temp2.php");
  unlink("$workdirPath/all2.php");
}
if($workitem == 'item3.php')
{
  unlink("$workdirPath/page3.php");
  unlink("$workdirPath/temp3.php");
  unlink("$workdirPath/all3.php");
}
if($workitem == 'item4.php')
{
  unlink("$workdirPath/page4.php");
  unlink("$workdirPath/temp4.php");
  unlink("$workdirPath/all3.php");

?>

这里只需要一些简单的模式匹配和替换

首先,守则:

   1.   if (preg_match('/^item(\d+)\.php$/', $workitem, $matches)) {
   2.     $number = $matches[1];
   3.     foreach(array('page','temp','all') as $base) {
   4.       unlink("$workdirPath/$base$number.php");
   5.     }
   6.   } else {
   7.     # unrecognized work item value; complain to user or whatever
   8.   }
preg_match
函数接受一个模式、一个字符串和一个数组。如果字符串与模式匹配,则匹配的部分存储在数组中。特定类型的模式是一个*p*erl5兼容的*reg*ular表达式,这就是名称的
preg\uuu
部分的来源

正则表达式看起来很吓人,但它们是扫描字符串并从中获取一些值的便捷方法。大多数角色只是代表他们自己;字符串
“foo”
与正则表达式
/foo/
匹配。但是,有些字符有特殊的含义,可以让您创建更通用的模式来匹配整个字符串集,而不必提前知道其中的确切内容

/
s只标记实际正则表达式的开始和结束;它们之所以存在,是因为您可以将附加的修改器标志与表达式本身一起粘贴到字符串中

^
$
表示字符串的开头和结尾
“/foo/”
匹配
“foo”
,但也匹配
“foobar”
“bunnyfooo”
,等等-任何包含“foo”的字符串都将匹配。但是
/^foo$/
只与“
foo”
完全匹配

\d
表示“任意数字”<代码>+表示“最后一件事中的一件或多件”。所以
\d+
表示“一个或多个数字”

句号(
)是特殊的;它完全匹配任何字符。因为我们想要一个文字句点,我们必须用反斜杠来逃避它<代码>\。只匹配一个句点

因此,我们的正则表达式是
'/^item\d+\.php$/'
,它将匹配任何
编号
.php
文件名。但这还不够。
preg_match
函数基本上是一个二进制测试:字符串是否与模式匹配,是还是否?在这种情况下,仅仅说“是的,字符串是有效的”是不够的;我们需要知道用户具体指定了哪些项目。这就是捕获组的用途。我们使用括号来表示“记住与此部分匹配的内容”,并提供一个数组名,其中包含这些记忆

字符串中与整个正则表达式匹配的部分(如果正则表达式没有像这样锚定在
^
..
$
中,则可能不是整个字符串)始终放在数组的元素0中。如果在正则表达式中使用括号,那么字符串中与第一对括号内的正则表达式部分匹配的部分将存储在数组的元素1中;如果有第二组圆括号,字符串的匹配部分将放入数组的元素2中,依此类推

因此,我们在数字(
(\d+
)周围加上括号,然后实际数字将被存储在
$matches
数组的元素1中

太好了,我们有一个号码。现在我们只需要使用它来建立我们想要删除的文件名

在每种情况下,我们都要删除三个文件:
page$n.php
temp$n.php
,以及
all$n.php
,其中
$n
是我们上面提取的数字。我们可以只放置三个
取消链接的
调用,但由于它们非常相似,我们可以使用循环来代替


取相同的不同前缀,无论其数目如何,并将它们组成一个数组。然后在该数组上循环。在循环体中,变量
$base
将包含它当前所在数组的任何元素。将其粘贴在
$workdirPath
前缀和我们从匹配中获得的
$number
之间,附加
.php
,这就是您的文件<代码>取消链接
然后返回循环顶部以获取下一个循环。

这里只需要一些简单的模式匹配和替换

首先,守则:

   1.   if (preg_match('/^item(\d+)\.php$/', $workitem, $matches)) {
   2.     $number = $matches[1];
   3.     foreach(array('page','temp','all') as $base) {
   4.       unlink("$workdirPath/$base$number.php");
   5.     }
   6.   } else {
   7.     # unrecognized work item value; complain to user or whatever
   8.   }
preg_match
函数接受一个模式、一个字符串和一个数组。如果字符串与模式匹配,则匹配的部分存储在数组中。特定类型的模式是一个*p*erl5兼容的*reg*ular表达式,这就是名称的
preg\uuu
部分的来源

正则表达式看起来很吓人,但它们是扫描字符串并从中获取一些值的便捷方法。大多数角色只是代表他们自己;字符串
“foo”
与正则表达式
/foo/
匹配。但是,有些字符有特殊的含义,可以让您创建更通用的模式来匹配整个字符串集,而不必提前知道其中的确切内容

/
s只标记实际正则表达式的开始和结束;它们之所以存在,是因为您可以将附加的修改器标志与表达式本身一起粘贴到字符串中

^
$
表示字符串的开头和结尾
“/foo/”
匹配
“foo”
,但也匹配
“foobar”
“bunnyfooo”
,等等-任何包含“foo”的字符串都将匹配。但是
/^foo$/
只与“
foo”
完全匹配

\d
表示“任意数字”<代码>+
表示“最后一件事中的一件或多件”。所以
\d+
表示“一个或多个数字”