从 PHP 函数中传递变量
Pass variable from within PHP function
我想通过 cron 任务报告在 php 中我 运行 的函数中删除了多少文件。
目前代码如下:-
<?php
function deleteAll($dir) {
$counter = 0;
foreach(glob($dir . '/*') as $file) {
if(is_dir($file)) {
deleteAll($file); }
else {
if(is_file($file)){
// check if file older than 14 days
if((time() - filemtime($file)) > (60 * 60 * 24 * 14)) {
$counter = $counter + 1;
unlink($file);
}
}
}
}
}
deleteAll("directory_name");
// Write to log file to confirm completed
$fp = fopen("logthis.txt", "a");
fwrite($fp, $counter." files deleted."."\n");
fclose($fp);
?>
这对我来说很有意义 VBA 背景,但计数器 returns null 我认为最后写入我的自定义日志文件时。我认为共享托管站点对能够全局声明变量或类似变量有一些限制?
感谢任何帮助!如果我不能计算已删除的文件,那不是世界末日,但以我选择的格式记录输出会很好。
由于范围的原因,这不起作用。在你的例子中 $counter
只存在于你的函数中。
function deleteAll($dir):int {
$counter = 0; // start with zero
/* Some code here */
if(is_dir($file)) {
$counter += deleteAll($file); // also increase with the recursive amount
}
/* Some more code here */
return $counter; // return the counter (at the end of the function
}
$filesRemoved = deleteAll("directory_name");
或者,如果您想发回更多信息,例如 'totalCheck' 等,您可以发回一组信息:
function deleteAll($dir):array {
// All code here
return [
'counter' => $counter,
'totalFiles' => $allFilesCount
];
}
$removalStats = deleteAll("directory_name");
echo $removalStats['counter'].'files removed, total: '.$removalStats['totalFiles'];
还有其他类似'pass-by-reference'的解决方案,但是你dont want those。
我想通过 cron 任务报告在 php 中我 运行 的函数中删除了多少文件。
目前代码如下:-
<?php
function deleteAll($dir) {
$counter = 0;
foreach(glob($dir . '/*') as $file) {
if(is_dir($file)) {
deleteAll($file); }
else {
if(is_file($file)){
// check if file older than 14 days
if((time() - filemtime($file)) > (60 * 60 * 24 * 14)) {
$counter = $counter + 1;
unlink($file);
}
}
}
}
}
deleteAll("directory_name");
// Write to log file to confirm completed
$fp = fopen("logthis.txt", "a");
fwrite($fp, $counter." files deleted."."\n");
fclose($fp);
?>
这对我来说很有意义 VBA 背景,但计数器 returns null 我认为最后写入我的自定义日志文件时。我认为共享托管站点对能够全局声明变量或类似变量有一些限制?
感谢任何帮助!如果我不能计算已删除的文件,那不是世界末日,但以我选择的格式记录输出会很好。
由于范围的原因,这不起作用。在你的例子中 $counter
只存在于你的函数中。
function deleteAll($dir):int {
$counter = 0; // start with zero
/* Some code here */
if(is_dir($file)) {
$counter += deleteAll($file); // also increase with the recursive amount
}
/* Some more code here */
return $counter; // return the counter (at the end of the function
}
$filesRemoved = deleteAll("directory_name");
或者,如果您想发回更多信息,例如 'totalCheck' 等,您可以发回一组信息:
function deleteAll($dir):array {
// All code here
return [
'counter' => $counter,
'totalFiles' => $allFilesCount
];
}
$removalStats = deleteAll("directory_name");
echo $removalStats['counter'].'files removed, total: '.$removalStats['totalFiles'];
还有其他类似'pass-by-reference'的解决方案,但是你dont want those。