Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP unlink();没有这样的文件或目录_Php - Fatal编程技术网

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);}