Zadejte hledaný výraz...

PHP flock a stále procesov – ako to fixnut?

Brunes
verified
rating uzivatele
13. 4. 2018 11:01:26
Ahojte,
už dlhšiu dobu riešim taký problém... Chcem automatické importy do databázy z csv, všetko mi funguje, import krásne spraví a súbor v podstate robí presne to čo od neho chcem, ale je tam háčik...
Tento proces sa spustí aj niekoľko krát, ako keby sa znovu spúšťal PHP súbor a znovu a znovu robí importy aj keď mám cron nastavený raz za 4 hodiny, potom mi to zaťažuje mysql server...
Dostal som radu aby som použil flock no nejak mi to nerobí presne čo by som chcel.
Napadá Vás niečo ako to fixnut?
Ďakujem.
$conn = mysqli_connect("localhost", DB_LOGIN, DB_PASS, DB_DB);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$handle = fopen("asdasd.csv", "r");
$start_time=time();
if (flock($handle, LOCK_EX)) {
if ($handle !== FALSE) {
while (($fileop = fgetcsv($handle, 10000, ",")) !== FALSE) {
$sku = $fileop;
$avail = $fileop;
$dostup = $fileop;
$time = time();
if($dostup == 4) {
$sql = "...";
} else {
$sql = "...";
}
if (!mysqli_query($conn, $sql)) {
echo "Error updating record: " . mysqli_error($conn);
}
$meter++;
if($meter == 8){
sleep(1);
$meter = 0;
}
}
flock($handle,LOCK_UN);
mysqli_close($conn);
fclose($handle);
exit();
}
exit();
}
else
{
echo "Error locking file!";
exit();
}
13. 4. 2018 11:01:26
https://webtrh.cz/diskuse/php-flock-a-stale-procesov-ako-to-fixnut#reply1340377
storyboard
verified
rating uzivatele
13. 4. 2018 14:35:47
Není možné, že to spouští náhodně někdo jiný? Třeba Google robot? To se může stát zejména, pokud na ten php soubor vede odkaz odněkud z webu (Google si navíc dokáže leccos domyslet). Zkus si třeba někam logovat kdy se to spouští a kdo to dělá (IP).
Dobrá praxe je přidat nějaký parametr, bez kterého se script nespustí, takže se to musí volat (např index.php?pwd=MojeTajneHeslo )
13. 4. 2018 14:35:47
https://webtrh.cz/diskuse/php-flock-a-stale-procesov-ako-to-fixnut#reply1340376
Klíčová otázka je, proč se spouští vícekrát.
Cron ho pouští přes příkazovou řádku ("php file.php"), nebo přes HTTP ("curl http://www.example.com/file.php")?
Pokud je soubor veřejně přístupný, nemůže ho pouštět jiný návštěvník, jak říká storyboard? Co říká access.log?
Nemám s flock() zkušenost, ale podle manuálu způsob, jak používáte flock(), váš problém nevyřeší, protože podruhé spuštěný flock() prostě počká, dokud se zámek neuvolní, a pak soubor zpracuje znovu. Měl byste použít argument LOCK_EX | LOCK_NB.
13. 4. 2018 15:06:03
https://webtrh.cz/diskuse/php-flock-a-stale-procesov-ako-to-fixnut#reply1340375
martinzsa
verified
rating uzivatele
(1 hodnocení)
13. 4. 2018 18:34:43
Btw ak mas problemy s vytazovanim DB tak skus zacat pouzivat pri vkladani velkeho mnozstva dat do db transakciu
13. 4. 2018 18:34:43
https://webtrh.cz/diskuse/php-flock-a-stale-procesov-ako-to-fixnut#reply1340374
alex93
verified
rating uzivatele
(70 hodnocení)
17. 4. 2018 23:14:00
Jak radí storyboard, loguj všechno pořádně(nejlépe vše co se dá) z toho souboru a máš to na jistotu, jestli tam není nějaké skryté zacyklení :) co se tam děje... je tam něco špatně a řešit to jinak než to opravit je vždycky špatně, řešení v podobě flock je nesmysl...
17. 4. 2018 23:14:00
https://webtrh.cz/diskuse/php-flock-a-stale-procesov-ako-to-fixnut#reply1340373
Pro odpověď se přihlašte.
Přihlásit