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

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

2 голосов
/ 10 апреля 2009

ниже - это некоторый код, который я использую для «перевода» массива карты в код 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);
}
}
}
?>

Ответы [ 6 ]

10 голосов
/ 10 апреля 2009

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

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

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

Добавить

fclose($f);

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

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

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

EDIT:

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

7 голосов
/ 10 апреля 2009

Существует еще более простой подход:

ob_start();
# Your code here ...
file_put_contents('yourfile.txt', ob_get_clean());
3 голосов
/ 10 апреля 2009

Если это то, что вы планируете писать через регулярные промежутки времени или с помощью разных сценариев, обратите внимание на использование 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);
2 голосов
/ 10 апреля 2009
$str = <<<your string comes here>>>
if( $fh = @fopen( "myfile.txt", "a+" ) ) {
            fputs( $fh, $str, strlen($str) );
            fclose( $fh );
}

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

1 голос
/ 10 апреля 2009

+ мои 2 цента:

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

1 голос
/ 10 апреля 2009

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

Проверьте этот пост для дальнейших инструкций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...