使用 CodeIgniter(3) 删除服务器(非本地)上的文件
Delete file a file on the server(not local) with CodeIgniter(3)
我有一个名为 home_view 的视图,其中有多个列表,例如 libri(books)。用户可以上传和删除文件。
这是home_view.php
的片段
<?php
echo "<table>";
echo "<tbody>";
echo "</br>";
foreach ($libri as $row):
?>
<tr>
<td>
<div>
</br>
<img src="<?php echo base_url('Immagini/book.png'); ?>" />
<a class="pdf" data-fancybox-type="iframe" rel="group" href="<?php echo base_url($row['Url_suffix']) ?>"><?php echo $row['Nome']; ?> </a>
<a class="deleteUser" href="javascript:void(0)" rel="<?php echo site_url('libro/elimina/'.$row['ID']) ?>"><img src="<?php echo base_url('Immagini/button_close.png'); ?>"/></a>
</div>
</td>
</tr>
<?php
endforeach;
?>
libri 是 table 的 Mysql db 并且有不同的列,Url_suffix 是一个 Varchar(255) 列,其中有 folder/filename.pdf
。在第二个锚点中,我成功删除了数据库中的行,但没有删除文件。我试着做这样的事情
<a class="deleteUser" rel="<?php unlink($row['Url_suffix']); ?>"><img src="<?php echo base_url('Immagini/button_close.png'); ?>"/></a>
但没有成功。我错了什么?
更新:
控制器libro.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Libro extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper("file");
}
public function elimina($libri_id) {
//$libri_ID = $this->libri->get_one($libri_id);
$result=$this->libri->did_delete_row($libri_id);
redirect(site_url('admin/dashboard'), 'refresh');
}
}
?>
您不能以这种方式使用 "unlink",基本上您需要在模型的帮助下在控制器上处理要删除的内容,例如:
public function delete_file($route, $file){
unlink($route . "/" . $file);
}
在模型中,您可以在任何地方使用它,$route 参数将是您存储文件的目录的路径,例如:
htdocs/website/static/books/user/
并且 $file 参数将是您要删除的带有扩展名的名称,例如:
myfirstbook.pdf
然后你将拥有文件的完整路径并将其删除,你只需要从控制器中的模型调用该函数,其中 link 由该锚点给出,例如
<a href="http://localhost/website/delete-file/$user/$name">Delete file</a>
你的控制器会有类似
的东西
public function delete_file($user, $file){
$this->load->model('YourModel', 'yourmodel');
$path = FCPATH . "static/books/user/".$user;
$this->yourmodel->delete_file($path, $file);
}
完成了。
希望对你有帮助。
我有一个名为 home_view 的视图,其中有多个列表,例如 libri(books)。用户可以上传和删除文件。
这是home_view.php
的片段<?php
echo "<table>";
echo "<tbody>";
echo "</br>";
foreach ($libri as $row):
?>
<tr>
<td>
<div>
</br>
<img src="<?php echo base_url('Immagini/book.png'); ?>" />
<a class="pdf" data-fancybox-type="iframe" rel="group" href="<?php echo base_url($row['Url_suffix']) ?>"><?php echo $row['Nome']; ?> </a>
<a class="deleteUser" href="javascript:void(0)" rel="<?php echo site_url('libro/elimina/'.$row['ID']) ?>"><img src="<?php echo base_url('Immagini/button_close.png'); ?>"/></a>
</div>
</td>
</tr>
<?php
endforeach;
?>
libri 是 table 的 Mysql db 并且有不同的列,Url_suffix 是一个 Varchar(255) 列,其中有 folder/filename.pdf
。在第二个锚点中,我成功删除了数据库中的行,但没有删除文件。我试着做这样的事情
<a class="deleteUser" rel="<?php unlink($row['Url_suffix']); ?>"><img src="<?php echo base_url('Immagini/button_close.png'); ?>"/></a>
但没有成功。我错了什么?
更新:
控制器libro.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Libro extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper("file");
}
public function elimina($libri_id) {
//$libri_ID = $this->libri->get_one($libri_id);
$result=$this->libri->did_delete_row($libri_id);
redirect(site_url('admin/dashboard'), 'refresh');
}
}
?>
您不能以这种方式使用 "unlink",基本上您需要在模型的帮助下在控制器上处理要删除的内容,例如:
public function delete_file($route, $file){
unlink($route . "/" . $file);
}
在模型中,您可以在任何地方使用它,$route 参数将是您存储文件的目录的路径,例如:
htdocs/website/static/books/user/
并且 $file 参数将是您要删除的带有扩展名的名称,例如:
myfirstbook.pdf
然后你将拥有文件的完整路径并将其删除,你只需要从控制器中的模型调用该函数,其中 link 由该锚点给出,例如
<a href="http://localhost/website/delete-file/$user/$name">Delete file</a>
你的控制器会有类似
的东西public function delete_file($user, $file){
$this->load->model('YourModel', 'yourmodel');
$path = FCPATH . "static/books/user/".$user;
$this->yourmodel->delete_file($path, $file);
}
完成了。 希望对你有帮助。