我想从我的beaglebone上运行的本地服务器中删除文件。
我创建了一个显示所有文件的页面,并允许您选择要删除的文件。 (如下所示)
网页以数组的形式将要删除的文件名称返回给php脚本unlink.php
Unlink.php的代码是:
<?php
$files = $_POST['file'];
print_r($files);
if (empty($files)) {
echo "No files were selected. Go back to 192.168.7.2 and refresh the page." ;
} else {
$N = count($files);
for ($i = 0; $i < $N; $i++) {
$path = '/Logs/';
print_r($path);
#chown($path, 666);
if (unlink($path . $_GET['$files[$i]'])) {
echo ": Deleted";
} else {
echo "fail";
}
}
}
?>
但是,每当我尝试删除文件时:它都会失败。
unlink()php函数没有正确实现,我不知道为什么。 我该怎么做正确的方法?
index.html
页面位于/var/www/html
,日志位于/var/www/html/Logs/
。本地服务器的地址为192.168.7.2
表格代码:
<?php
$url = $_SERVER['DOCUMENT_ROOT'];
$path = "/var/www/html/Logs";
$dh = opendir($path);
$k = 0;
$foo = True;
while (($file = readdir($dh)) !== false) {
if ($file != "." && $file != "..") {
if ($k == 0 || $k % 6 == 0) {
$col .= "<tr><td><input type='checkbox' name='file[]' value='$file'> <a href='Logs/$file'>$file</a><br /></td>";
} else if ($k % 6 == 5) {
$col .= "<td><input type='checkbox' name='file[]' value='$file'> <a href='Logs/$file'>$file</a><br /></td></tr>";
} else {
$col .= "<td><input type='checkbox' name='file[]' value='$file'> <a href='Logs/$file'>$file</a><br /></td>";
}
$k++;
}
}
echo "<form action='unlink.php' method='post'><table>$col</table><br/><center><input type='submit' name='formSubmit' value='Delete' /></center></form>";
closedir($dh);
?>
编辑:PHP显示错误
警告:chmod():第17行的/var/www/html/unlink.php中不允许进行操作
chmod($path . $files[$i], 0755);
警告:取消链接(/var/www/html/Logs/2017.01.24--13.43.43--0.log):第18行/var/www/html/unlink.php中的权限被拒绝
if (unlink($path . $files[$i]))
但当我检查ls -la
/ Logs时 - >它显示为属于www-data
。如何更改此权限?
答案 0 :(得分:0)
<?php
$files = $_POST['file'];
$path = "/var/www/html/Logs/";
print_r($files);
if (empty($files)) {
echo "No files were selected. Go back to 192.168.7.2 and refresh the page." ;
} else {
foreach ($files as $file) {
if (unlink($path . $file)) {
echo $path. $file ." : Deleted";
} else {
echo $path. $file . " : fail";
}
}
}
?>
应该这样做,$path
是错误的,即使你使用了与其他代码相同的内容,它也缺少斜杠。
尽管如此,此代码不会阻止恶意用户操作。
How to avoid UNLINK security risks in PHP?
根据您更新的问题,我可以看到Logs文件夹是/media/card/Logs
的符号链接。
ls -la /media/card
的输出是什么?
进一步阅读:
答案 1 :(得分:0)
unlink()
/ delete的文件没有打开。如果文件是.exe
等,请同时签入 Windows任务管理器->进程,然后将其杀死。确定未打开文件1后,请尝试以下代码:
// Check existence of file
if (file_exists($cekFile1)) {
// make sure you have permission to delete file
if(chmod($fileDir, 0777)){
if(!unlink($cekFile1)){
echo "unlink is fail !";
}
}else{
echo "chmod is fail";
}
// owner have read, write, execute rights.
// owner's user group only have read rights.
// everybody else only have read rights.
chmod($fileDir, 0744);
}
有关chmod()
的更多信息,请查看以下参考文献: