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); } } } ?> 

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

 // 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 цента:

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