Рассмотрим несколько способов сохранения данных в файл.
Функция file_put_contents() для записи в файл
Функция появилась в 5й версии PHP. Это самый простой, наверное, способ записать скалярные данные (строку или текст) в файл.
| 1 2 3 4 5 6 7 8 9 | <?php $filename = 'somefile.txt'; $text = 'Text sample.'; //записываем текст в файл file_put_contents($filename, $text); ... //потом его можно прочитать из файла $text = file_get_contents($filename); ?> | 
Этот пример очень простой и не использует всех параметров функции. Так как PHP используется типично для создания сайтов, то нужно помнить о параллельных запросах к сайту. Т.е. может возникнуть ситуация одновременной записи данных, чтения данных во время записи и т.п. коллизии. Воспользуемся флажком блокировки — LOCK_EX, который обеспечит нам эксклюзивный доступ к файлу на время записи:
| 1 2 3 4 | <?php //записываем текст в файл с блокировкой file_put_contents($filename, $text, LOCK_EX); ?> | 
В показанных примерах мы полностью перезаписывали файл, очищая его предыдущее содержимое. Чтобы добавить данные в конец файла, используется флаг — FILE_APPEND.
| 1 2 3 4 | <?php //добавляем текст в конец файла file_put_contents($filename, $text, FILE_APPEND); ?> | 
Функция возвращает кол-во записанных в файл байт или же FALSE в случае не удачи.
| 1 2 3 4 5 6 | <?php //сохраняем текст в файл $bytesCount = file_put_contents($filename, $text); if ($bytesCount === false)      echo "При сохранении данных произошла ошибка!"; ?> | 
Как записать в файл массив или объект?
Для этого можно воспользоваться той же самой функцией записи текста, но предварительно массив или объект должны быть сериализованы, т.е. преобразованы в текстовый вид. После загрузки данных необходимо будет выполнить обратную операцию — восстановить массив из строки — десериализовать.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php //это наш массив (или объект) $arr = array(1,2,3); ... $filename = 'somefile.txt'; $text = serialize($arr); //сериализация //записываем текст в файл file_put_contents($filename, $text); ... //потом его можно прочитать из файла $text = file_get_contents($filename); //восстановить массив из текстового представления $arr = unserialize($text); ?> | 
Если вам интересны нюансы сериализации — читайте статью по ссылке.
Функция file_put_contents() идентична последовательному вызову функций — fopen(), fwrite(), fclose(). Рассмотрим их как второй вариант записи в файл на PHP.
Как создать файл и записать в него данные в PHP
Чтобы начать работать с файлом, операционной системе надо выделить дескриптор (описатель). Также надо указать что вы собираетесь делать с файлом, т.е. выбрать режим работы.
| 1 2 3 4 | <?php //создали/очистили файл и открыли его для записи $handler = fopen($filename, "w"); ?> | 
Режим «w» — (writting), позволит только записывать в файл. Если файл не существует, то он будет создан, если он уже есть — то он будет обнулен.
Если вам не нужно очищать содержимое файла, то используйте режим «w+», который будет аналогичен использованию флага FILE_APPEND. При этом дескриптор позволит как запись так и чтение данных из файла.
| 1 2 3 4 | <?php //открыли файл для записи данных в конец файла $handler = fopen($filename, "w+"); ?> | 
Итак, дескриптор файла создан. Теперь запишем данные.
| 1 2 3 | <?php fwrite($handler, $text); ?> | 
Мы можем продолжить использовать открытый дескриптор и далее, дописывая данные. При окончании работы скрипта — он автоматически будет освобожден. Можно освободить его и раньше.
| 1 2 3 4 | <?php //закрыли файл fclose($handler); ?> | 
Что насчет монопольного доступа к файлу? Аналогично действию флага LOCK_EX мы можем выполнить блокировку следующим образом:
| 1 2 3 4 5 6 7 8 9 | //включаем блокировку if (flock($handler, LOCK_EX)) {     fwrite($handler, $text);     //сняли блокировку     flock($handler, LOCK_UN); } else {     //блокировку выполнить не удалось     echo "Не могу выполнить блокировку!"; } | 
Чтение данных из файла выполняет функция fread();
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php //открыли файл $handler = fopen($filename, "w+"); //записали данные fwrite($handler, $text); ... //чтобы записать данные реально на диск, нужно либо //закрыть файл или выполнить ф-цию fflush() fflush($handler); //переместили указатель файла в самое начало  fseek($handler, 0); //читаем все данные из файла $text = fread($handler, filesize($filename)); //завершили работу с файлом fclose($handler); ?> | 
Работать с функциями file_put_contents()/file_get_contents() — проще, но они не дают полного контроля над операциями чтения/записи. Дополнительную инфу полезно будет почитать в мануале PHP.
Уберите эти дурацкие движущиеся фигурки на заднем фоне! Из за них сайт тормозит пипец как.
Вы не первый, кто жалуется, решил пока убрать этот скрипт. Видимо, на машинах с 1-2 ядерами, скрипт кушает многовато процессорного времени.