我在我的项目中使用yii1。 运行项目时,yii会自动在项目的assets文件夹中创建资产文件。有时它会产生一些问题。 我想知道如何在站点管理员端设置一个按钮,以便在单击该按钮时删除所有资产文件。
感谢
答案 0 :(得分:1)
您希望这样做:
在jquery中,您需要调用一个请求,该请求将在按钮单击事件中调用php文件
Html + Jquery
<div id='result'></div>
<button>Delete</delete>
<script src="http://code.jquery.com/jquery-1.7.2.js"></script>
<script>
$("button").click(function() {
$.ajax({
type: "POST",
url : "request.php",
data: {
'fire': 'true'
},
success : function(data)
{
console.log(data);
$("#result").html(data);
}
},"json");
})
</script>
<强> PHP 强>
每当调用它时,php都会删除asset
文件夹中的所有文件。
<?php
$files = glob('D:\Development\Websites\test\del\asset\*'); //Give real paths here
foreach($files as $file){ // iterate files
if(is_file($file))
unlink($file); // delete file
}
echo 'Deleted all files';
?>
注意:
我不知道yii。由于OP想知道在简单的jquery调用php中实现它的例子,我已经编写了这个简单的调用。
Points to be noted
答案 1 :(得分:1)
这是一个简单的函数来清除具有通用结构的yii 1.1应用程序的资源文件夹:
public static function removeAssets()
{
$dir = realpath(Yii::app()->basePath.DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."assets");
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it,
RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
if ($file->getFilename() === '.' || $file->getFilename() === '..') {
continue;
}
if ($file->isDir()){
rmdir($file->getRealPath());
} else {
unlink($file->getRealPath());
}
}
return true;
}
@stu:Why do you want to delete anything in the assets folder? This is all administered by Yii, there shouldn't really be a need to change anything in there?
有时,如果资产被缓存,并且您对已发布的脚本进行了一些更改,那么它很有用。
答案 2 :(得分:1)
如果您拥有Linux服务器并且PHP具有运行shell命令的权限,您可以尝试使用单行命令以递归方式删除资产中的所有文件和目录。
要删除文件,您必须对该文件及其存储位置具有写入权限。文件的所有者不需要rw权限就可以使用它。
shell_exec("rm -rf /var/www/public_html/assets/*");
但请小心使用rm -rf
命令!。
对于Windows,您需要2个命令:
shell_exec("RD /S /Q C:\pathto\assets");
shell_exec("MD C:\pathto\assets");