إخي الفاضل .. برنامجك ممتاز و لكـنك نسيت شيئا مهما جدا : يجب عليك ان تقوم بعمل قفل على الملف المراد الكتابة إليه ، فإذا قام شخصان بتشغيل السكربت في الوقت نفسه و إضطر السكربت الى إنشاء ملف جديد فسوف ينتج ملف غير صالح ..
أنا أقتـرح هذا الكـود:
كود:
#!/usr/bin/perl
########################################################
# Cacher.pl v1.0 #
# By Khaled Fadhel #
# alfadhil@hotmail.com #
########################################################
# #
# Salalah-Network CGI Scripts #
# http://www.salalah.cjb.net #
# #
########################################################
########################################################
# #
# You can redistribute this script or use it freely #
# as long as this header is not edited in the script. #
# #
########################################################
# Description: #
# This script allows you to cache the output of #
# almost any cgi script,to speed the execution #
# of the script. To do so launch this script #
# instead of launching the script to be cached #
########################################################
#History #
#======= #
# Cacher.pl v1.0: 28-12-2000 #
# - First release #
########################################################
use Fcntl qw(:flock); # Load flock() functions
# Path of the cache file
$cachefile="test.cache";
#Path to the script that generates the output to be cached.
$script= "test.pl";
#When to update the cache file? (in seconds)
# 15 minutes: 900 {15*60}
# 30 minutes: 1800 {30*60}
# 1 Hour : 3600 {1*60*60}
# 12 Hours : 43200 {12*60*60}
# 1 day : 86400 {24*60*60}
$period= 60 ;
#This line can be changed to the content type that your script outputs.
print "Content-type: text/html\n\n";
&cache;
#############################
#Shall we use the cache file? or Update it?
sub cache{
if (-e $cachefile ){
@filestats=stat($cachefile); #Get file stats
if((time()-$filestats[9])>= $period){&update;}
else{open(I,$cachefile)|| die("Can't open the cache file\n");
@content = <I>;
close(I);
$content[0]="";
print @content;}
}else{&update;}
}
#############################
#Update cache file
sub update{
$content= `perl $script`;
open(O,">".$cachefile)|| die("Can't open the cache file\n");
flock(O, LOCK_EX);
print O "$content";
close(O)
&cache;
}
سوف تلاحظ الفرق في بداية السكربت و وظيفة update .
مع تحياتي