如何返回" TRUE"删除我服务器上文件夹中的所有文件后?

时间:2016-03-15 10:33:23

标签: php

我有这个删除文件夹内容的功能:

// Delets the content of the "files/weekly_reports/" folder.
public function delete_pdf(){

        // get all file names
        $files = glob('files/weekly_reports/*'); 

        foreach($files as $file){ // iterate files

            if(is_file($file))
            unlink($file); // delete file

            }
        }

在for循环中运行此函数时,PHP代码会继续运行,尽管它还没有完成删除过程(我认为),因此跳过进程,因为它返回FALSE。

所以我添加了另一部分:

// Delets the content of the "files/weekly_reports/" folder.
public function delete_pdf(){

    // get all file names
    $files = glob('files/weekly_reports/*'); 

    foreach($files as $file){ // iterate files

        if(is_file($file))
        unlink($file); // delete file

    }


    if (empty($files)){
        return TRUE;
    } else {
        return FALSE;
    }

}

所以我得到了相同的结果。

如何确保文件夹100%为空并且循环运行没有任何问题。

对于好奇的人来说,这是调用函数的主要代码:

public function main_weekly_report(){

    $today = date('Y-m-d');

    $reports = $this->kas_model->get_wr_table();

    foreach ($reports as $report) {

        // Outputs the current report that it is on. 
        var_dump($report);

        // Delete the content of the folder containing the PDFs
        if ($this->delete_pdf()){

            // Creates a new PDF
            $this->create_pdf($report->wr_app_id, $report->wr_date1, $report->wr_date2, $report->wr_date3);

            // Increment "dates" to next week.
            // $this->kas_model->weekly_inc_date($report->wr_id, 'wr_date1', $today);
            // $this->kas_model->weekly_inc_date($report->wr_id, 'wr_date2', $today);

            // Sends to the report to the customer:
            if ( $this->is_connected() ) {
                $this->send_pdf_customer($report->wr_app_id);
                echo "Sent to customer!";
            }
        }

    }

}

2 个答案:

答案 0 :(得分:1)

在这一行中, <service android:name=".service.ContactsChangeService" android:exported="true"> </service> if (empty($files)){仍然是您在$files中获得的文件名数组。

取消链接文件会删除对文件系统中文件的引用,但不会影响内存中数组的内容。

您可以在方法结束时再次在测试中再次运行$files = glob('files/weekly_reports/*');来重新填充它。

答案 1 :(得分:0)

你的代码是对的。在文件系统中将元素删除后,您错过了unset()元素。请在foreach中尝试此操作。

foreach($files as $key=>$file){ // iterate files

    if(is_file($file))
    {
      if(unlink($file))
      {
         unset($files[$key]);
      } // delete file
    }
}

那么,这将起作用

if (empty($files)){
   return TRUE;
} else {
   return FALSE;
}

输出:TRUE