Una forma es utilizar la función de PHP rebaño con un archivo ficticio, que actuará como organismo de control.
En el comienzo de nuestro trabajo, si el archivo de elevar una LOCK_EX bandera, salida, o esperar, se puede hacer.
PHP documentación rebaño: http://php.net/manual/en/function.flock.php
Para estos ejemplos, un archivo llamado lock.txt se debe crear en primer lugar.
Ejemplo 1, si se está ejecutando otro proceso gemelo, se cerrará correctamente, sin volver a intentar, dando un mensaje de estado.
arrojará el estado de error, si el archivo lock.txt no es accesible.
<?php
$fp = fopen("lock.txt", "r+");
if (!flock($fp, LOCK_EX|LOCK_NB, $blocked)) {
if ($blocked) {
// another process holds the lock
echo "Couldn't get the lock! Other script in run!\n";
}
else {
// couldn't lock for another reason, e.g. no such file
echo "Error! Nothing done.";
}
}
else {
// lock obtained
ftruncate($fp, 0); // truncate file
// Your job here
echo "Job running!\n";
// Leave a breathe
sleep(3);
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
}
fclose($fp); // Empty memory
Ejemplo 2, se quiere que el proceso para esperar, para una ejecución después de la cola, en su caso:
<?php
$fp = fopen("lock.txt", "r+");
if (flock($fp, LOCK_EX)) { // acquire an exclusive lock
ftruncate($fp, 0); // truncate file
// Your job here
echo "Job running!\n";
// Leave a breathe
sleep(3);
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
}
fclose($fp);
También es factible con fopen en x modo, creando y borrando un archivo cuando termina el script.
Crear y abrir para escribir solo; coloque el puntero del archivo en el comienzo del archivo . Si el archivo ya existe, los fopen() llaman fallará devolviendo FALSE
http://php.net/manual/en/function.fopen.php
es el script ejecuta en un servidor web, o la línea de comandos? –
Si realmente importa ... servidor web. –
probablemente un bloqueo de mysql, en ese caso, por lo que el script puede abortar con gracia y decir "ya está en uso". usar flock y similares bloquearía el script fuera de apache y probablemente causaría 500 errores internos y otras cosas. –