如何通过站点管理员端的按钮删除yii资产

时间:2015-04-10 13:04:07

标签: php yii

我在我的项目中使用yii1。 运行项目时,yii会自动在项目的assets文件夹中创建资产文件。有时它会产生一些问题。 我想知道如何在站点管理员端设置一个按钮,以便在单击该按钮时删除所有资产文件。

感谢

3 个答案:

答案 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. 我已经给出了我的本地驱动器的路径,您需要提供目录的绝对路径
  2. 我只是在ajax调用到达request.php文件时删除文件。您可以根据需要进行更改。

答案 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");