>        $cache_file_name = "cache/$id/$tid". ($showall ? '_all.php' : '.php');
>        $cache_dir_name= "cache/$id";
>       
>        if(!file_exists($cache_file_name) || @filectime($cache_file_name) +
30 < time() ) {

If you may have loaded/altered the file system between calls to this
directory/file, you need to use:
http://php.net/clearstatcache

>            if(!is_dir($cache_dir_name)) {
>                mkdir($cache_dir_name, 0777);
>            }



>            $lock=@fopen($cache_file_name . '.lock','w');
>            if(flock($lock,LOCK_EX)) {
>                include('modules/rally_live/create_cache.php');
>                flock($lock,LOCK_UN);
>            }
>            fclose($lock);

What happens if I don't get the lock?...  You just skip all this code...
I think you need some kind of while() loop to just keep trying until you
*DO* get a lock...

Otherwise, you will sometimes blow right by here, read the file that the
other script got a lock for, but hasn't created yet, and BAM!, there's your
"sometimes empty" files that have the code in them when you go looking,
because you have a race condition.

>        }
>        clearstatcache();

Hmmmm.  Might be okay for this to be only here, but I'd copy it above as
well.  *EVERYWHERE* you might need *current* file info.

>        for($i=0;!file_exists($cache_file_name);$i++) {
>            if($i==3) die('<b>Cannot read cache file!</b>');
>            clearstatcache();
>        }
>        include($cache_file_name);  // *sometimes includes empty file*
>        echo "<!-- File $cache_file_name included -->";
>
>The 'create_cache.php'  creates a php code, that later needs to be 
>executed. The problem is, the just created cache file seems to be empty 
>*sometimes* when included, however, if I look at it, it does contain 
>code. I do call fflush($cache_file) before closing it, so I don't see 
>why the file is empty.
>If anyone can help me, I would be really glad.

I think it's just your locking mechanism isn't safe, as described above. 
You can probably get rid of the for loop now.

-- 
Like Music?  http://l-i-e.com/artists.htm
I'm looking for a PRO QUALITY two-input sound card supported by Linux (any
major distro).  Need to record live events (mixed already) to stereo
CD-quality.  Soundcard Recommendations?
Software to handle the recording? Don't need fancy mixer stuff.  Zero (0)
post-production time.  Just raw PCM/WAV/AIFF 16+ bit, 44.1KHz, Stereo
audio-to-disk.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to