PHP unlink();没有这样的文件或目录
我到处找这个问题,找不到解决办法。我有这个:PHP unlink();没有这样的文件或目录,php,Php,我到处找这个问题,找不到解决办法。我有这个: <?php $file_name = $_GET['name']; $file_delete = '../u/' . $file_name; unlink($file_delete); //header("location: $file_delete"); ?> 取消链接返回错误:没有这样的文件或目录,但是如果我尝试标题(“位置:$file\u delete”)打开文件(本例中为图片) 我哪里可能错了?经过一些研究后
<?php
$file_name = $_GET['name'];
$file_delete = '../u/' . $file_name;
unlink($file_delete);
//header("location: $file_delete");
?>
取消链接
返回错误:没有这样的文件或目录
,但是如果我尝试标题(“位置:$file\u delete”)代码>打开文件(本例中为图片)
我哪里可能错了?经过一些研究后,取消链接()
似乎不允许您使用相对路径(带“./”)
这里有一个替代方案:
<?php
$file_name = $_GET['name'];
$file_delete = dirname(__FILE__, 2) . '\\u\\' . $file_name;
unlink($file_delete);
?>
我的代码也有同样的问题。我为解决这个问题所做的是:
首先执行:
var_dump($image_variable) // var_dump($file_delete) in your case.
它输出:字符串(23)(我的图像路径)
当我开始计算字符串时,我只找到了22个字符。我想知道23号在哪里?
我仔细地检查和计数,最后我发现在我的图像路径的末尾有空间。因此,我使用php trim()函数来删除空格。像
$trimed_path = trim($image_variable) // trim($file_delete) in your case.
第二:现在执行
unlink($trimed_path).
或者像支票一样
if(unlink($trimed_path))
{
echo "File Deleted";
}
else
{
echo "Error Deleting File";
}
我花了几个小时才弄明白。如上所述,unlink()在路径方面很挑剔
解决办法是:
1)定义路径(顺便说一句,这就是Wordpress的方式):
2) 做:
首先获取要删除的文件的绝对路径,并在删除之前检查文件是否存在:
$file_name = $_GET['name'];
$base_dir = realpath($_SERVER["DOCUMENT_ROOT"]);
$file_delete = "$base_dir/your_inner_directories_path/$file_name";
if (file_exists($file_delete)) {unlink($file_delete);}
可能unlink()
不接受带有“./”的相对路径。请尝试var\u dump($file\u delete)
查看路径是否正确。@AmrAly如果我使用标题(“位置:$file\u delete”),它就像我提到的一样正确;它将打开文件。请记住,您的代码将允许任何人删除您系统上Web服务器有权删除的任何文件。请避免直接从输入参数映射到文件系统。如果我把浏览器指向类似的东西会怎么样?只需注意安全问题,并认为如果实现一个更健壮的方法值得,直到同样的问题。。取消链接(C:\wamp64\www/u/test.jpg):如果您使用windows,在第7行的C:\wamp64\www\php\delete.php中没有这样的文件或目录!你必须使用“\”斜杠,这应该可以做到!我刚刚编辑了我的答案啊哈x3@Chunrand-(戳)让我知道这是否有效。如果有,请随意标记我的答案为已接受,以结束主题!因为“\u\”不受支持,我搜索并使用了“\\u\”,但它再次给了我相同的错误。。。取消链接(C:\wamp64\www\u\test.jpg):C:\wamp64\www\php\delete.phpIs C:\wamp64\www\u\test.jpg中没有这样的文件或目录文件到您的文件的正确路径?
unlink(ROOTPATH.'public_html/file.jpg');
$file_name = $_GET['name'];
$base_dir = realpath($_SERVER["DOCUMENT_ROOT"]);
$file_delete = "$base_dir/your_inner_directories_path/$file_name";
if (file_exists($file_delete)) {unlink($file_delete);}