Рейтинг@Mail.ru
 





Шаг 3

Запись в файл

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

Начнем с файла.

Записать файл на сервере можно несколькими способами. для этого используется комбинация функций
fopen(), fwrite(), fclose(). В промежутках между этими функциями нужно делать блокировку, иначе высока вероятность совместного доступа. То есть если два юзера одновременно захотят записать данные, начнется путаница. Для начала мы воспользуемся безопасной комбинацией функций file_get_contents() и file_put_contents(). Один момент - функция file_put_contents() доступна только в 5 (и выше) версии php. А функция file_get_contents() умеет читать файл частично только начиная с 5.1 версии. Но пока нам файл нужен целиком, а дальше видно будет.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php


/**   
* The guest book  
* Гостевая книга   
* @author IT studio IRBIS-team   
* @copyright © 2009 IRBIS-team   
*/   
/////////////////////////////////////////////////////////  
/**   
* We establish the charset and level of errors   
* Устанавливаем кодировку и уровень ошибок   
*/   
header("Content-Type: text/html; charset=utf-8");   
error_reporting(E_ALL);  

    
$text1 = !empty($_POST['text1'])?$_POST['text1']:null;  
    
$text2 = !empty($_POST['text2'])?$_POST['text2']:null;   
?>   
<form action="?" method="post">  
<input name="text1" type="text" value="<?php echo htmlspecialchars($text1?>"/><br />  
<textarea name="text2" cols="40" rows="10"><?php echo htmlspecialchars($text2); ?></textarea><br />  
<input name="ok" type="submit" />  
</form>   
<?php   

    
if(!empty($_POST['ok']))  
    {  
        if(!
$text1)  
            echo 
'Текстовое поле не заполнено.';  
        elseif(!
$text2)  
            echo 
'Текстовая область не заполнена.';  
        else 
// Записываем информацию в файл, заканчивая  символом переноса строки \n
            
file_put_contents('text.txt'$text2 ."\n"FILE_APPEND);   
    }  
    else  
    {  
        echo 
'Напишите что-нибудь';  
    } 

Нажмите кнопку и посмотрите, что теперь находится рядом с этим скриптом. Появился новый файл? Откройте его в блокноте и посмотрите, что в нём. Вот так сохраняются данные на сервере.

Записывает информацию в файл функция file_put_contents(). Обратите внимание на флаг FILE_APPEND. Если использовать функцию без этого параметра, файл перезапишется. А так данные будут добавляться в конец файла. Еще обратите внимание на символ переноса строки. Каждая новая запись будет теперь с новой строчки. нам это важно.

Теперь нужно их прочитать.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php


/**   
* The guest book  
* Гостевая книга   
* @author IT studio IRBIS-team   
* @copyright © 2009 IRBIS-team   
*/   
/////////////////////////////////////////////////////////  
/**   
* We establish the charset and level of errors   
* Устанавливаем кодировку и уровень ошибок   
*/   
header("Content-Type: text/html; charset=utf-8");   
error_reporting(E_ALL);  

    
$text1 = !empty($_POST['text1']) ? $_POST['text1'] : null;  
    
$text2 = !empty($_POST['text2']) ? $_POST['text2'] : null;   
?>   
<form action="?" method="post">  
<input name="text1" type="text" value="<?php echo htmlspecialchars($text1?>"/><br />  
<textarea name="text2" cols="40" rows="10"><?php echo htmlspecialchars($text2); ?></textarea><br />  
<input name="ok" type="submit" />  
</form>   
<?php   

    
if(!empty($_POST['ok']))  
    {  
        if(!
$text1)  
            echo 
'Текстовое поле не заполнено.';  
        elseif(!
$text2)  
            echo 
'Текстовая область не заполнена.';  
        else 
// Записываем информацию в файл, заканчивая каждую символом переноса строки 
            
file_put_contents('text.txt'$text2 ."\n"FILE_APPEND);   
    }  
    else  
    {  
        echo 
'Напишите что-нибудь';  
    }  

// Проверяем наличие файла и если есть - выводим его содержимое в поток 
    
if(file_exists('text.txt'))  
        echo 
nl2br(htmlspecialchars(file_get_contents('text.txt')));


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