3v4l.org

run code in 300+ PHP versions simultaneously
<?php define('xreservedmaxstrings', 1000000); //кол-во строк в списке define('xreservedsize', 128); //длинна строки в списке function mkfile($path){ fclose(fopen($path, 'a')); } function putdata($data){ $lock=fopen(__FILE__.'.1.lock', 'w+'); flock($lock, LOCK_EX); //блокируем файл lock для избежания коллизий $i=1; while(true){ if($i<16) $pre=0; //ведущий ноль $dir='./list/'; $list=$dir.$pre.dechex($i).'.list'; //путь к списку if(!file_exists($dir)) mkdir($dir); //если нет папки, создать if(!file_exists($list)) mkfile($list); //если нет списка, создать if($i>255){ return false; echo '<t>[u01] Lists are full.</t>'."\n"; break; } //если заполнены 255 списков, выдать ошибку if(filesize($list)<(xreservedmaxstrings*(xreservedsize+1))){ //если список не заполнен $data.=str_repeat(' ', xreservedsize); $data=substr($data, 0, xreservedsize); file_put_contents($list, $data."\n", LOCK_EX|FILE_APPEND); return true; break; } //записать data в список, дополнив пробелами и обрезав, чтобы data весил xreservedsize байт $i++; $pre=''; } flock($lock, LOCK_UN); fclose($lock); } function getdata($index){ $lock=fopen(__FILE__.'.1.lock', 'w+'); flock($lock, LOCK_EX); //блокируем файл lock для избежания коллизий $listindex=ceil($index/xreservedmaxstrings); //вычисляем номер списка $liststring=($index-($listindex-1)*xreservedmaxstrings); //вычисляем номер строки $pre=''; if($listindex<16) $pre=0; //ведущий ноль $list='./list/'.$pre.dechex($listindex).'.list'; //путь к списку if(!file_exists($list)){ echo '<t>[u02] Requested list is not exists.</t>'."\n"; return false; } //если нет нужного списка, выдать ошибку elseif(filesize($list)<($liststring*(xreservedsize+1))){ echo '<t>[u03] Requested string is not exists.</t>'."\n"; return false; } //если нет нужной строки, выдать ошибку else{ $listf=fopen($list, 'r'); fseek($listf, (($liststring-1)*(xreservedsize+1))); $string=fgets($listf, xreservedsize); return rtrim($string, ' '); } //выдать строку, убрав лишние пробелы flock($lock, LOCK_UN); fclose($lock); } putdata('text'); echo getdata(1);
Output for git.master, git.master_jit
Warning: fopen(/in/rLIaa.1.lock): Failed to open stream: Permission denied in /in/rLIaa on line 12 Fatal error: Uncaught TypeError: flock(): Argument #1 ($stream) must be of type resource, bool given in /in/rLIaa:13 Stack trace: #0 /in/rLIaa(13): flock(false, 2) #1 /in/rLIaa(87): putdata('text') #2 {main} thrown in /in/rLIaa on line 13
Process exited with code 255.
Output for rfc.property-hooks
Warning: fopen(/in/rLIaa.1.lock): Failed to open stream: Permission denied in /in/rLIaa on line 12 Fatal error: Uncaught TypeError: flock(): Argument #1 ($stream) must be of type resource, false given in /in/rLIaa:13 Stack trace: #0 /in/rLIaa(13): flock(false, 2) #1 /in/rLIaa(87): putdata('text') #2 {main} thrown in /in/rLIaa on line 13
Process exited with code 255.

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
60.07 ms | 401 KiB | 8 Q