421
Vývoj / Re:PHP nechce nastavit Globals
« kdy: 18. 10. 2019, 11:52:06 »
Proměnná $global neexistuje. Když ten chybující řádek vyhodíš, tak by měl problém pominout.
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
Kup si USB hub a máš vystaráno.A kto bude tie disky v tom plastovom obale chladit? Som si myslel, že výrobca tam dá nízkopríkonové disky... no nie on tam narval desktopový seagate s 7200 rpm, bez chladenia mi teplota stúpala nad 50°C![]()
![]()
https://www.czc.cz/icy-box-ib-rd3640su3/122677/produkt
https://www.playthek.com/fantec-fantec-35us3-black-4x3-sata-hdd-usb3-esata-fantec-hardware-electronic-pZZa1-2097589160.html
Máš nejaké aj reálne vyskúšané? Lebo tieto boxy som našiel a ja, ale aká je kvalita?
Jenom bych upřesnil, že neustále píšete, že selhávají funkce flock() a file_put_contents() atd., ale ve skutečnosti selhává váš kód. Ty funkce fungují správně, chyby jsou ve vašem kódu.Nic jiného netvrdím. Záleží přece na tom jakým způsobem ty funkce použijete a to jsem psal, že já hledám funkci, která umožňuje přístup k souboru více uživateli, načíst soubor, změnit soubor, zapsat soubor. V mých testech není ta změna.
@Exkalibr: Pokud k tomu grafu nemáš žádné vyhodnocení, tak proč si nám ho sem dal? K čemu nám je užitečný?
V praxi přece nikdo nechce jen načíst data. Musíš to udělat tak, že načteš data, pak provedeš operace a pak je uložíš. Což znamená znovu zkontrolovat velikost souboru, porovnat jestli velikost sedí nebo případně načíst celý soubor v modu r+, porovnat data, dát rewind a zapsat. Jen tak si člověk může ověřit že mezi zpracováváním dat nedošlo ke změně.
Teď to čtu v manuálu, že append mode pro fopen je atomický.
"If handle was fopen()ed in append mode, fwrite()s are atomic (unless the size of string exceeds the filesystem's block size, on some platforms, and as long as the file is on a local filesystem). That is, there is no need to flock() a resource before calling fwrite(); all of the data will be written without interruption."
fwrite($f, "Hello, ");
fwrite($f, "World");
tak musíš počítat s tím, že se ti mezi ta dvě slova může vecpat něco jiného. Na to je však snadný recept: Naskládáš si vše do jednoho stringu a ten atomicky zapíšeš jedním vrzem. Je to i rychlejší.
Aplikace prvního zámku:Kód: [Vybrat]$start = AtomicityTestLockTimes($n,$n,1,7);
if ( $start )
{
$success = @mkdir("$n.t1");
if ( $success == false )
echo "<b>Failed to lock;</b><br>";
$result = copy($original_fname, $cname);
if ( $result == false )
echo "<h4>BACKUP failed.</h4>";
$result = @rmdir("$n.t1");
if ( $result == false )
echo "<h4>Directory lock was not removed</h4>";
}
A druhý zámek jsem neaplikoval, jak jsem už napsal.
přidávání dat do souboru pomocí fopen(filename, "a") je taky neatomicitní?
Zkus raději podle manuáluKód: [Vybrat]file_put_contents($filename, $data, FILE_APPEND | LOCK_EX);
To mohu použít jen v případě, že ve scriptu nejedou dva procesy paralelně, já myslel právě pro to použití dvou skriptů. Dám příklad:
Co chci zapsat do logu:
"Byl jsem tady Skript 2 čas 1:00:11.000"
"Byl jsem tady Skript 1 čas 1:00:11.002"
"Byl jsem tady Skript 3 čas 1:00:11.001"
Jestli je zapíše za sebou - jedno v jakém pořadí,
nebo se může stát, že vznikne kolize
napřKód: [Vybrat]Byl jsem tady Skript 2 čas 1:00:11.00
Byl jsem tady Skript 1 čas 21:00:11.002
Byl jsem tady Skript 3 čas 1:00:11.001
(Ubral nulu na konci prvního řádku)
přidávání dat do souboru pomocí fopen(filename, "a") je taky neatomicitní?
file_put_contents($filename, $data, FILE_APPEND | LOCK_EX);
Na endoru jsem se kdysi díval a byla omezená trafikem. Pokud se nepletu. Už jsem se před časem díval ale to bylo mnoho lez zpátky a narážel jsem na samé limity. Například limit odeslaných požadavků na server databáze.
Sqlite nemá administrátorské prostředí ne? Nebo se to změnilo od těch dob co existovalo Moxo?
Doporučíš mi nějaký hosting?
Na začátku téhle diskuse jsem pracoval s odlišným souborem, zdroj a cíl byly odlišné soubory. Četl jsem z jednoho a zapisoval do druhého. Teď jsem ten algoritmus změnil, takže čtu z toho, do kterého jsem zapisoval. Což mimochodem znamená, že jsem musel implementovat dva adresářové locky, jeden na zazálohování souboru a druhý na jeho obnovu když dojde k selhání.