Ответы пользователя по тегу PHP
  • Асинхронная работа ZipArchive (::addFromString) теряет файлы, как победить?

    s5656
    @s5656
    Ну давайте обратимся к документации и попробуем понять в какой момент происходят изменения в конечном файле:

    ZipArchive::close — Close opened or created archive and save changes. This method is automatically called at the end of the script.

    То есть либо при вызове ZipArchive::close, либо в конце скрипта (так как автоматически вызывается ZipArchive::close).

    Сам по себе ZipArchive — синхронный.
    Если в одном потоке, то вы создаете и редактируете один архив, через один объект ZipArchive и когда вызываете close — все сохраняется в файл, на диск.
    Если вы работаете в нескольких потоках, то у вас создается несколько ZipArchive, которые друг о друге ничего не знают и когда вы вызываете close — каждый из них пытается сохранить свои изменения и здесь уже кто последний тот и папа сохранил свою версию.

    Нужно либо как-то передавать экземпляр ZipArchive между вашими потоками, либо писать свою (или найти готовую) библиотеку для асинхронной работы с zip архивами.

    Как более простой вариант — делать работу с файлами асинхронно (во временной директории?), а затем их архивировать через тот же zip (консольную утилиту).
    Ответ написан
    2 комментария
  • Как считать 10 последних строк файла?

    s5656
    @s5656
    Почему никто документацию не читает?
    Пример на коленке, но смысл понятен.

    <?php
    $fp = fopen('filename', 'r');
    fseek($fp, -1, SEEK_END);
    $result = '';
    $lineCounter = 0;
    while ($lineCounter !== 10 && ftell($fp) !== 0) {
    	$byte = fread($fp, 1);
    	if ($byte === "\n") {
    		$lineCounter++;
    	}
    	fseek($fp, -2, SEEK_CUR);
    	$result = $byte . $result;
    }
    
    echo $result;
    Ответ написан
    Комментировать
  • Какой шаблонизатор взять для нового проекта на php?

    s5656
    @s5656
    никакой, использовать нативные шаблоны
    Ответ написан
    Комментировать