PHP unlink不起作用

时间:2013-03-06 16:51:25

标签: php yii unlink

我的一个CMS解决方案中有一个多删除功能,我有以下代码:

public function actionDelete() {
    if(Yii::app()->request->isPostRequest) {
        if(isseT($_POST['submit'])) {
            if(isset($_POST['delete']) && (sizeof($_POST['delete']))) {
                foreach($_POST['delete'] as $i => $items) {
                    $model[$i] = Pages::model()->findByPk((int)$items);

                    if(!is_null($model[$i])) {
                        $image[$i] = $model[$i]->image;

                        if($model[$i]->delete()) {
                            if(!unlink($image[$i])) {
                                die('Unable to delete Page Image.');
                            }
                        }
                    }
                }
            }
        }
    }

    $this->redirect('/admin/pages');
}

这是Yii控制器的操作,在每个页面上都有一个值填充在“image”字段/列中。

在我使用post数据调用此操作后,它会从数据库表中删除记录,但它不会从文件系统中删除图片和图像,脚本永远不会出现在这一点上:{{1} }

PHP是否有可能剥离并忽略die('Unable to delete Page Image.');函数,主要是在生产/实时服务器上?

2 个答案:

答案 0 :(得分:4)

  

PHP是否有可能剥离并忽略unlink功能,主要是在生产/实时服务器上?

不,绝对不是(除非他们disabled that function但是应该抛出错误)。它是逻辑错误,权限错误或路径错误。

答案 1 :(得分:1)

1:我的第一个建议是测试$ model [$ i] - >图像值,以确保它输出你想要输出的内容。然后,在尝试取消链接之前,请输出$ image [$ i] RIGHT。 确保您没有尝试删除不存在的文件(这将永远是成功的。)在尝试删除文件之前测试文件是否存在。我怀疑这是一个非常可能的情况。或许$ model [$ i] - >图像在Web访问方面保存图像路径,而不是文件系统?

2:我强烈建议您撤消删除顺序。

现在,首先删除数据库行,然后删除图像。如果删除过程中途失败,那么您丢失了指向需要删除的图像的链接。

如果你这样做:

if(!unlink($image[$i])) {
    if($model[$i]->delete()) {
        die('Unable to delete Page Image.');
    }
}

这允许您仅在成功删除图像时删除数据库条目,这有助于防止未附加的图像浮动在文件系统周围。如果删除过程失败,您仍然拥有尝试再次删除它所需的所有信息。