我有这个删除文件夹内容的功能:
// 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!";
}
}
}
}
答案 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