Ниже приведен некоторый код, который я использую для «перевода» массива карт в код 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); } } } ?>
Это должно быть довольно просто. Добавить
// 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>>');
РЕДАКТИРОВАТЬ:
Таким образом, вы можете даже сжимать данные «на лету» с помощью обтекателя потока сжатия, если количество данных становится очень большим.
Существует еще более простой подход:
ob_start(); # Your code here ... file_put_contents('yourfile.txt', ob_get_clean());
Если вы планируете писать на регулярной основе или с помощью разных сценариев, посмотрите на использование 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);
$str = <<<your string comes here>>> if( $fh = @fopen( "myfile.txt", "a+" ) ) { fputs( $fh, $str, strlen($str) ); fclose( $fh ); }
это должно …
написать все строки, а затем отправить файл клиенту.
Проверьте это сообщение для дальнейших инструкций
+ мои 2 цента:
Вы можете проверить массовые функции загрузки данных серверов баз данных, так как большинство из них могут загружать файлы в пакет быстрее, чем выполнять тысячи вставок.