Solved

have function to check file whether are opening

Posted on 2000-03-22
16
196 Views
Last Modified: 2006-11-17
have function to check a file whether are open?
0
Comment
Question by:gameboss
  • 7
  • 4
  • 3
  • +2
16 Comments
 
LVL 8

Expert Comment

by:us111
ID: 2648228
hmm I don't know a function which tell you if the file is opened
Try that:

<?
  $f = fopen("myfile.txt", "r");
  if ($f <> false)
       print "The file is opened";
?>
0
 
LVL 2

Expert Comment

by:maxkir
ID: 2648349
No.
0
 

Expert Comment

by:mrvithan
ID: 2648566
I amn't quite sure but it may depend on the software. If it locks the file, of couse you can't open it.
0
 

Author Comment

by:gameboss
ID: 2648908
I want use it in a multi users system.
multi user want write same file ,
when one user open a file,other user can get a message and exec another program,I do not want other user get  error message.
0
 
LVL 8

Expert Comment

by:us111
ID: 2649135
well I have no idea how we can do that.......
Create a database with filename and opened as fields.

if an user opens a file : update the database with filename and opened=true
on close: opened=false

if an user opens a file which is already opened : check the filename in the database.

It could be a solution
0
 
LVL 2

Expert Comment

by:gravity
ID: 2649616
Some pseudo code (how *do* you spell pseudo ?)

Check to see if lock file exists and put result in $open
while ($open==false) {
write lock file
open file
do whatever with file
close file
unlink lock file
check to see if lock file exists and put result in $open
}

Hope that enlightens.
0
 
LVL 8

Expert Comment

by:us111
ID: 2649712
gravity has right too
0
 
LVL 2

Expert Comment

by:maxkir
ID: 2649819
Try this code, i didn't test it.

$fp = fopen($filename, "w");

$attempts = 0
while ( !flock($fp, 2) && ($attempts++ < 10) )
{
   // file is locked by someone else
   sleep(1);
}

if ($attempts == 10)
{
   fclose($fp);
   die("unable to aquire a lock");
}

// We get a lock
// Do things
fwrite($fp, "Stuff");

// Release lock :
flock($fp, 3);
fclose($fp);
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:gameboss
ID: 2652069
to maxkir:
the "flock()" always return true,so the "while()"part of your code always be run.
0
 

Author Comment

by:gameboss
ID: 2652182
to maxkir:
the "flock()" always return true,so the "while()"part of your code always be run.
0
 

Author Comment

by:gameboss
ID: 2652189
to maxkir:
the "flock()" always return true,so the "while()"part of your code always be run.
0
 
LVL 2

Expert Comment

by:maxkir
ID: 2652330
First, it will be run only 10 attempts only if flock returns false.

Second, why it will always return true ? It returns true when it will be able to acquire the lock.

Another way - use semaphores:

$sem = 0x12345;
$sem_id = sem_get($sem);

sem_acquire($sem_id);
$fp = fopen("/tmp/aaa", "w");

for($i=0; $i<100000; $i++)
{
fwrite($fp, "Stuff");
}
 fclose($fp);
sem_release($sem_id);


0
 

Author Comment

by:gameboss
ID: 2653074
to maxkir:
I tryed on my computer(windows95).
whatever the file whether be lock,your code always sleep 10 seconds.

0
 
LVL 2

Accepted Solution

by:
maxkir earned 30 total points
ID: 2653231
Well, I see. You can't use semaphores.

And i suggest that flock works only on UNIX/WinNT, but I'm not sure.

Well, then use gravities or us111 comments ...
0
 

Author Comment

by:gameboss
ID: 2655661
Adjusted points from 10 to 30
0
 

Author Comment

by:gameboss
ID: 2655662
thank you very much.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
PHP Healthcheck 2 85
Paypal 502 Error 3 75
Mysql sync between 3-4 mysql db 4 25
Website Interactive tool that will do calculations 3 29
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
This article discusses four methods for overlaying images in a container on a web page
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now