我有一个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");
?>
答案 0 :(得分:3)
这里只需要一些简单的模式匹配和替换。
首先,代码:
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_
部分的来源。
正则表达式对于没有经验的人来说是可怕的,但它们是扫描字符串并从中获取一些值的便捷方式。大多数人物只代表自己;字符串"foo"
与正则表达式/foo/
匹配。但是有些角色具有特殊的含义,可以让你制作更多的一般模式来匹配一整套字符串,而你不必提前知道它们中的具体内容。
/
只标记实际正则表达式的开头和结尾;他们在那里,因为你可以在字符串中附加额外的修饰符标志以及表达式本身。
^
和$
表示字符串的开头和结尾。 "/foo/"
匹配"foo"
,还有"foobar"
,"bunnyfoofoo"
等等 - 包含&#34; foo&#34;会匹配。但/^foo$/
仅与&#34; foo"
完全匹配。
\d
表示&#34;任何数字&#34;。 +
表示&#34;最后一件事中的一件或多件&#34;。所以\d+
表示&#34;一个或多个数字&#34;。
期间(.
)很特别;它匹配任何角色。既然我们想要一个字面时期,我们必须用反斜杠来逃避它; \.
只匹配一段时间。
因此,我们的正则表达式为'/^item\d+\.php$/'
,它将匹配任何item
数字 .php
文件名。但这还不够。 preg_match
函数基本上是二进制测试:字符串是否与模式匹配,是或否?在这种情况下,仅仅说'&#34;是的,字符串是有效的&#34 ;;我们需要知道具体是用户指定的项目。这就是捕获群体的用途。我们使用括号来表示&#34;记住与此部分匹配的内容&#34;,并提供一个充满这些记忆的数组名称。
匹配整个正则表达式的字符串部分(可能不是整个字符串,如果正则表达式不是^
... $
这样的(\d+)
is)总是放在数组的元素0中。如果在正则表达式中使用括号,则匹配第一对括号内正则表达式部分的字符串部分将存储在数组的元素1中;如果有第二组括号,则字符串的匹配部分将进入数组的元素2,依此类推。
所以我们在括号($matches
)周围加上括号,然后在page$n.php
数组的元素1中记住实际数字。
太好了,我们有一个号码。现在我们只需要使用它来构建我们想要删除的文件名。
在每种情况下,我们都要删除三个文件:temp$n.php
,all$n.php
和$n
,其中unlink
是我们上面提取的数字。我们可以只调用三次$base
次调用,但由于它们都非常相似,我们可以使用循环代替。
使用不同数字的不同前缀,并从中创建一个数组。然后遍历该数组。在循环体中,变量$workdirPath
将包含它当前所在阵列中的任何元素。坚持在$number
前缀和我们从匹配中获得的.php
之间,添加unlink
,以及您的文件。 {{1}}它然后回到循环的顶部以获取下一个。