Php unlink()函数的参数无效

Php unlink()函数的参数无效,php,unlink,Php,Unlink,我有一个目录为:PDF\9783790820874-c1.PDF的文件 我想使用unlink()function删除此文件。但是,如果我将目录设置为变量并取消链接,它似乎不起作用。 例如: $FileToDelete = "PDF\9783790820874-c1.pdf"; unlink($FileToDelete); 代码是逻辑的,不是吗?但为什么在执行时,它会显示错误消息: Warning: unlink(PDF\9783790820874-c1.pdf ): Invalid argum

我有一个目录为:
PDF\9783790820874-c1.PDF的文件
我想使用
unlink()
function删除此文件。但是,如果我将目录设置为变量并取消链接,它似乎不起作用。
例如:

$FileToDelete = "PDF\9783790820874-c1.pdf";
unlink($FileToDelete);
代码是逻辑的,不是吗?但为什么在执行时,它会显示错误消息:

Warning: unlink(PDF\9783790820874-c1.pdf ): Invalid argument on line 36

我必须将文件目录保存到一个变量中,以便与程序配合良好,是否有任何方法来解决它?

您的反斜杠被解释为转义序列

将其更改为正斜杠(适用于Windows上的路径):

或使用单引号:

$FileToDelete = 'PDF\9783790820874-c1.pdf';
或者干脆避开反斜杠:

$FileToDelete = "PDF\\9783790820874-c1.pdf";

您的反斜杠被解释为转义序列

将其更改为正斜杠(适用于Windows上的路径):

或使用单引号:

$FileToDelete = 'PDF\9783790820874-c1.pdf';
或者干脆避开反斜杠:

$FileToDelete = "PDF\\9783790820874-c1.pdf";

我假定您在基于反斜杠路径分隔符的Windows上

我认为问题是由于逃避反斜杠导致的,请尝试:

$FileToDelete = "PDF\\9783790820874-c1.pdf";
unlink($FileToDelete);
希望这能帮你解决问题


请记住,与字符串内的转义相比,“”和“”的行为有所不同。因此,虽然“a\b.pdf”可能有效,“a\b.pdf”可能意味着完全不同的东西(其中a和b是[一些字符串])。

我假定您在基于反斜杠路径分隔符的Windows上

我认为问题是由于逃避反斜杠导致的,请尝试:

$FileToDelete = "PDF\\9783790820874-c1.pdf";
unlink($FileToDelete);
希望这能帮你解决问题


请记住,与字符串内的转义相比,“”和“”的行为有所不同。因此,尽管“a\b.pdf”可能有效,“a\b.pdf”可能意味着完全不同的东西(其中a和b是[一些字符串])。

无法重现错误!尝试将
\
更改为
/
错误是由于文件名中的\导致的。尝试思考
\9
是什么。。。无论哪种方式,如果要使用反斜杠,都需要使用另一个反斜杠对其进行转义,或者对字符串使用单引号。但是,如果我直接使用目录路径编写参数,则代码运行良好,如:
unlink('PDF\9783790820874-c1.PDF')并且我尝试将“\”更改为“/”,但不起作用@rizier123无法重现错误!尝试将
\
更改为
/
错误是由于文件名中的\导致的。尝试思考
\9
是什么。。。无论哪种方式,如果要使用反斜杠,都需要使用另一个反斜杠对其进行转义,或者对字符串使用单引号。但是,如果我直接使用目录路径编写参数,则代码运行良好,如:
unlink('PDF\9783790820874-c1.PDF')并且我尝试将“\”改为“/”,但在@Rizier123中效果不太好。无论如何,使用单引号是一个好习惯,除非PHP需要在其中处理某些内容。我认为你有一个错误的链接,虽然,这是一个为正则表达式。这可能是您想要的。我有两个变量,它们是
$str1=“PDF\\9783790820874-c1.PDF”
str2=$DataField[$j].\\'.$DataField[$j+1]
,两者都会回显相同的结果:
PDF\9783790820874-c1.PDF
,但是当我使用Function
unlink($str1)
unlink($str2)
时,只有带有
$str1
作为参数的那个会起作用。为什么?请帮助@joecoderClear
str1
str2
实际上并不相同,否则它们的工作原理是相同的。我不知道您的
$DataField
数组中有什么,因此我无法帮助您调试
str2
。但是如果
str1
有效,那么您的问题就解决了吗?不,
$str1
仅用于测试目的。实际上,我使用
$DataField[]
来存储文件目录和文件名,然后我必须使用它来获取它们,以便删除。
$str1
$str2
都返回了完全相同的结果,但是为什么
$str2
不起作用呢@JoeCoderIt使用单引号是一个好习惯,除非PHP需要在其中处理某些内容。我认为你有一个错误的链接,虽然,这是一个为正则表达式。这可能是您想要的。我有两个变量,它们是
$str1=“PDF\\9783790820874-c1.PDF”
str2=$DataField[$j].\\'.$DataField[$j+1]
,两者都会回显相同的结果:
PDF\9783790820874-c1.PDF
,但是当我使用Function
unlink($str1)
unlink($str2)
时,只有带有
$str1
作为参数的那个会起作用。为什么?请帮助@joecoderClear
str1
str2
实际上并不相同,否则它们的工作原理是相同的。我不知道您的
$DataField
数组中有什么,因此我无法帮助您调试
str2
。但是如果
str1
有效,那么您的问题就解决了吗?不,
$str1
仅用于测试目的。实际上,我使用
$DataField[]
来存储文件目录和文件名,然后我必须使用它来获取它们,以便删除。
$str1
$str2
都返回了完全相同的结果,但是为什么
$str2
不起作用呢@乔科德