Arhn - архитектура программирования

PHP записать в файл

ниже приведен код, который я использую для «перевода» массива карты в код SQL, чтобы я мог легко обновить свою базу данных после обновления карты игры. Как видите, он выводит код SQL на экран, чтобы я мог его скопировать и вставить.

Поскольку мои карты станут больше, это станет неэффективным, так как это приведет к сбою браузера из-за массового вывода, поэтому вместо этого мне интересно, можно ли создать файл .txt и записать в него все данные вместо печати на экран?

<?php
if (isset($_POST['code'])){
$map = $_POST['code'];
$map = preg_replace("/,\\s*}/i", "}", $map);
$map = str_replace("{", "[", $map);
$map = str_replace("}", "]", $map);
$map = json_decode('[' . $map . ']');

$arrayCount1 = 0;
$arrayCount2 = -1;

$H = sprintf('%05d', 00000);
$V = sprintf('%05d', 00000);
$id = 1;

echo "INSERT INTO `map` (`id`, `horizontal`, `verticle`, `image`) VALUES" . "<br />";

for ($count1 = 0; $count1 < sizeof($map[0]); $count1++){
$arrayCount2++;
$arrayCount1 = 0;
$V = sprintf('%05d', $V + 1);
$H = sprintf('%05d', 00000);

for ($count2 = 0; $count2 < sizeof($map); $count2++){
echo "(" . $id . ", '" . $H . "', '" . $V . "', '" . $map[$arrayCount1][$arrayCount2] . "')," . "<br />";
$arrayCount1++;
$id++;
$H = sprintf('%05d', $H + 1);
}
}
}
?>
10.04.2009

Ответы:


1

Это должно быть довольно просто. Добавлять

// second parameter 'a' stands for APPEND
$f = fopen('/path/to/the/file/you/want/to/write/to', 'a');

в начало вашего скрипта.

Добавлять

fclose($f);

до конца для вашего скрипта, чтобы чисто закрыть дескриптор файла (хорошая практика, даже если дескрипторы будут автоматически закрыты завершающим скриптом).

И поменяйте все свои echo и print на

fwrite($f, '<<your string>>');

РЕДАКТИРОВАТЬ:

Таким образом, вы даже можете сжимать данные на лету с помощью оболочки потока сжатия если объем данных становится действительно большим.

10.04.2009

2

Есть еще более простой подход:

ob_start();
# Your code here ...
file_put_contents('yourfile.txt', ob_get_clean());
10.04.2009

3

Если вы планируете писать это через регулярные промежутки времени или с помощью разных сценариев, посмотрите на использование flock (), чтобы заблокировать файл и предотвратить повреждение данных.

    $fp = fopen("/tmp/lock.txt", "w+");

if (flock($fp, LOCK_EX)) { // do an exclusive lock
    fwrite($fp, "Write something here\n");
    flock($fp, LOCK_UN); // release the lock
} else {
    echo "Couldn't lock the file !";
}

fclose($fp);
10.04.2009

4
$str = <<<your string comes here>>>
if( $fh = @fopen( "myfile.txt", "a+" ) ) {
            fputs( $fh, $str, strlen($str) );
            fclose( $fh );
}

это должно делать ...

10.04.2009
  • обратите внимание, что здесь есть еще три похожих ответа ... ob_start и fwrite переходят в поток категории в файл, в то время как он отправляется в файл сразу, поэтому лучше для сброса. Ответ на блокировку - самый безопасный, но, скорее всего, излишний для большинства ситуаций. что-то вроде этого должно быть предпочтительнее, если вы это видите. 12.04.2010

  • 5

    напишите все строки, а затем отправьте файл клиенту.

    Дополнительные инструкции см. В этом сообщении.

    10.04.2009

    6

    + мои 2 цента:

    Вы можете проверить функции массовой загрузки данных на своих серверах баз данных, так как большинство из них могут загружать файлы в пакетном режиме быстрее, чем выполнение тысяч вставок.

    10.04.2009
  • определенно! вопрос (из заголовка) действительно уже получил ответы здесь. но к фактической проблеме OP, возможно, было бы лучше получить другой подход. дамп файла TXT, потому что он слишком велик для браузера, может быть не лучшим вариантом. 12.04.2010
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..