|
วันนี้พบปัญหาในการคำนวณหา diskspace ใน hosting ของ directadmin ครับ มันเหมือนจะเพี้ยน ๆ ไม่รู้เป็นผลมาจากอะไร ไม่รู้ว่าเป็นเพราะการ restore ข้อมูลบ่อย หรือว่าเป็นเพราะการ upgrade directadmin 1.33 ทดลอง rewrite cache ใหม่ด้วยคำสั่ง
echo "action=cache&value=showallusers" >> /usr/local/directadmin/data/task.queue
แล้วก็ยังไม่ได้ครับ มันก็ยังเพี้ยนอยู่เข้าใจว่ามันไปดู lastupdatequota ใน domains/domain.usage แล้วนำมาคำนวณพื้นที่สำหรับ hosting ใหม่ในแต่ละวัน
หาวิธีแก้ยังไม่ได้สักที จึงต้องเขียน script ขึ้นมาเพื่อแทรกระบบการคำนวณ hosting space เข้าไป โดยได้ตัดสินใจเขียนเป็น script php ดังนี้
#!/usr/local/bin/php -n
<?php
function get_size($path)
{
if(!is_dir($path)) return filesize($path);
if ($handle = opendir($path)) {
$size = 0;
while (false !== ($file = readdir($handle))) {
if($file!='.' && $file!='..') {
// function filesize has been deleted
$size += get_size($path.'/'.$file);
}
}
closedir($handle);
}
return $size;
}
$i=0;
$fs = fopen("/usr/local/directadmin/data/admin/show_all_users.cache","r");
while(!feof($fs)){
$readall .= fread($fs,1024);
}
fclose($fs);
$oreadall = $readall;
if ($handle = opendir('/usr/local/directadmin/data/users/')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && $file != "admin") {
$users[$i] = $file;
$totalsize = round((((get_size("/home/".$users[$i]))/1024)/1024),4);
$total = round($totalsize,1);
$pos1 = strpos($oreadall,$users[$i]."=");
$pos2 = strpos($oreadall,""a=",$pos1);
$pos3 = strpos($oreadall," /",$pos2);
$cquota = substr($oreadall,$pos2,$pos3-$pos2);
$tmpline = substr($oreadall,$pos1,$pos3-$pos1);
$ntmpline = str_replace($cquota,""a=".$total,$tmpline);
$nreadall = str_replace($tmpline,$ntmpline,$oreadall);
$fs = fopen("/usr/local/directadmin/data/admin/show_all_users.cache","w");
fwrite($fs,$nreadall);
fclose($fs);
$fl = fopen("/usr/local/directadmin/data/users/".$users[$i]."/user.usage","r");
$read = fread($fl,4048);
fclose($fl);
$arread = split("\n",$read);
foreach($arread as $val){
$val = trim($val);
if (substr($val,0,6) == "quota="){
$newwrite = str_replace($val,"quota=".$total,$read);
}
}
$fl = fopen("/usr/local/directadmin/data/users/".$users[$i]."/user.usage","w");
fwrite($fl,$newwrite);
fclose($fl);
$i++;
}
}
closedir($handle);
}
exit;
?>
โปรแกรมจะทำการตรวจสอบพื้นที่ใน /home/user จากนั้นก็จะเอาไปเขียนลงใน user.usage และ update cache showalluser ใน hosting ให้ครับ
Webdesign Article : |