16299

РАБОТА С ФАЙЛАМИ в РНР

Лабораторная работа

Информатика, кибернетика и программирование

ЛАБОРАТОРНАЯ РАБОТА №4 РАБОТА С ФАЙЛАМИ В большинстве случаев включая и пример рассмотренный в предыдущей лабораторной работе данные необходимо сохранять и загружать для последующего использования. Рассмотрим как созданную в примере к предыдущей лабораторной р

Русский

2013-06-20

41.9 KB

4 чел.

ЛАБОРАТОРНАЯ РАБОТА №4

РАБОТА С ФАЙЛАМИ

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

Рассмотрим, как созданную в примере к предыдущей лабораторной работе форму заказа клиента можно сначала записать в файл, а затем прочитать ее из файла.

Существуют 2 основных способа хранения данных: в двумерных файлах и в БД. Двумерный файл может иметь множество форматов, но в общем случае под двумерным файлом будем понимать простой текстовый файл.

  1.  Открытие файла


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


int fopen(string $filename, string $mode, bool $use_include_path=false)


Открывает файл с именем $filename в режиме $mode и возвращает дескриптор открытого файла. Если операция "провалилась", то, как это принято, fopen() возвращает false. Впрочем, мы можем не особо беспокоиться, проверяя выходное значение на ложность — вполне подойдет и проверка на ноль, потому что дескриптор 0 в системе соответствует стандартному потоку ввода, а он, очевидно, никогда не будет открыт функцией fopen() (во всяком случае, пока не будет закрыт нулевой дескриптор, а это делается крайне редко). Необязательный параметр $use_include_path говорит PHP о том, что, если задано относительное имя файла, его следует искать также и в списке путей, используемом инструкциями include и require. Обычно этот параметр не используют.

Параметр $mode может принимать следующие значения:

r — файл открывается только для чтения. Если файла не существует, вызов регистрирует ошибку. После удачного открытия указатель файла устанавливается на его первый байт, т. е. на начало;

r+ — файл открывается одновременно на чтение и запись. Указатель текущей позиции устанавливается на его первый байт. Как и для режима r, если файлане существует, возвращается false. Следует отметить, что если в момент записи указатель файла установлен где-то в середине файла, то данные запишутся прямо поверх уже имеющихся, а не "раздвинут" их, при необходимости увеличив размер файла. Будьте внимательны;

w — создает новый пустой файл. Если на момент вызова уже был файл с таким именем, то он предварительно уничтожается. В случае неверно заданного имени файла вызов, как нетрудно догадаться, "проваливается";

w+ — аналогичен r+, но если файла изначально не существовало, создает его. После этого с файлом можно работать как в режиме чтения, так и записи. Если файл существовал до момента вызова, его содержимое удаляется;

a — открывает существующий файл в режиме записи, и при этом сдвигает указатель текущей позиции за последний байт файла. Этот режим полезен, если требуется что-то дописать в конец уже имеющегося файла. Как водится, вызов неуспешен в случае отсутствия файла;

a+ — открывает файл в режиме чтения и записи, указатель файла устанавливается на конец файла, при этом содержимое файла не уничтожается. Отличается от a тем, что если файла изначально не существовало, то он создается. Этот режим полезен, если вам нужно что-то дописать в файл (например, в журнал), но вы не знаете, создан ли уже такой файл;

Но это еще не полное описание параметра $mode. Дело в том, что в конце любой из строк r, w, a, r+, w+ и a+ может находиться еще один необязательный символ — b или t. Если указан b (или не указан вообще никакой), то файл открывается в режиме бинарного чтения/записи. Если же это t, то для файла устанавливается режим трансляции символа перевода строки, т. е. он воспринимается как текстовый.

Можно предварять имя файла строкой http:// или ftp://, при этом будет осуществляться доступ к файлу с удаленного хоста. В случае HTTP-доступа PHP открывает соединение с указанным сервером. После чего при помощи файлового дескриптора из удаленного файла можно читать обычным образом — например, посредством все той же функции fgets().

  1.  
    Закрытие файла



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


int fclose(int $fp)


Закрывает файл, открытый предварительно функцией fopen(). Возвращает false, если файл закрыть не удалось (например, что-то с ним случилось или же разорвалась связь с удаленным хостом). В противном случае возвращает значение "истина".

Заметьте, что вы должны всегда закрывать FTP- и HTTP-соединения, потому что в противном случае "беспризорный" файл приведет к неоправданному простою канала и излишней загрузке сервера. Кроме того, успешно закрыв соединение, вы будете уверены в том, что все данные были доставлены без ошибок. Особенно своевременное закрытие критично при использовании FTP-файла в режиме записи, когда вывод программы для ускорения буферизуется. Не закрыв файл, вы вообще не сможете быть уверены, что буфер вывода очистился, а значит, файл записался на удаленную машину верно.


3. Чтение и запись


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

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

Блочные чтение/запись


string fread(int $f, int $numbytes)


Читает из файла $f $numbytes символов и возвращает строку этих символов. После чтения указатель файла продвигается к следующим после прочитанного блока позициям (это происходит и для всех остальных функций). Разумеется, если $numbytes больше, чем можно прочитать из файла (например, раньше достигается конец файла), возвращается то, что удалось считать. Этот прием можно использовать, если вам нужно считать в строку файл целиком. Для этого просто задайте в $numbytes очень большое число (например, сто тысяч). Но если вы заботитесь об экономии памяти в системе, так поступать не рекомендуется. Дело в том, что в некоторых версиях PHP передача большой длины строки во втором параметре fread() вызывает первоначальное выделение этой памяти в соответствии с запросом (даже если строка гораздо короче). Конечно, потом лишняя память освобождается, но все же ее может и не хватить для начального выделения.


int fwrite(int $f, string $st)


Записывает в файл $f все содержимое строки $st. Эта функция составляет пару для fread(), действуя "в обратном направлении".

Например, с помощью описанных двух функций можно копировать файлы (правда, в PHP есть для этого отдельная функция — copy()), считав файл целиком посредством fread() и затем записав в новое место при помощи fwrite().

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

Построчные чтение/запись


string fgets(int $f, int $length)


Читает из файла одну строку, заканчивающуюся символом новой строки \n. Этот символ также считывается и включается в результат. Если строка в файле занимает больше $length-1 байтов, то возвращаются только ее $length-1 символов. Функция полезна, если вы открыли файл и хотите "пройтись" по всем его строкам. Стоит также заметить, что эта функция (ровно как и функция fread()) в случае текстового режима) в Windows заботится о преобразовании пар \r\n в один символ \n, так что будьте внимательны при работе с текстовыми файлами в этой операционной системе.


int fputs(int $f, string $st)


Эта функцияполный аналог fwrite(). 


4. Положение указателя текущей позиции


int feof(int $f)


Возвращает true, если достигнут конец файла (то есть если указатель файла установлен за концом файла). Эта функция чаще всего используется в следующем контексте: 


$f=fopen("myfile.txt","r");

while(!feof($f))

{ $st=fgets($f);

// теперь мы обрабатываем очередную строку $st

// . . .

}

fclose($f);


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


int fseek(int $f, in $offset, int $whence=SEEK_SET)


Устанавливает указатель файла на байт со смещением $offset (от начала файла, от его конца или от текущей позиции, в зависимости от параметра $whence). Это, впрочем, может и не сработать, если дескриптор $f ассоциирован не с обычным локальным файлом, а с соединением HTTP или FTP.

Параметр $whence задает, с какого места отсчитывается смещение $offset. В PHP для этого существуют три константы, равные, соответственно, 0, 1 и 2:

SEEK_SET — устанавливает позицию начиная с начала файла;

SEEK_CUR — отсчитывает позицию относительно текущей позиции;

SEEK_END — отсчитывает позицию относительно конца файла.

В случае использования последних двух констант параметр $offset вполне может быть отрицательным (а при применении SEEK_END он будет отрицательным навернка).

1.Как это ни странно, но в случае успешного завершения эта функция возвращает 0, а в случае неудачи  


int ftell(int $f)


Возвращает положение указателя файла. 


5. Функции манипулирования целыми файлами


Часто бывает нужно работать с файлами не построчно (или поблочно), а целиком. 


bool copy(string $src, string $dst)


Копирует файл с именем $src в файл с именем $dst. При этом, если файл $dst на момент вызова существовал, осуществляется его перезапись. Функция возвращает true, если копирование прошло успешно, а в случае провала — false.


bool rename(string $oldname, string $newname)


Переименовывает (или перемещает, что одно и то же) файл с именем $oldname в файл с именем $newname. Если файл $newname уже существует, регистрируется ошибка, и функция возвращает false. То же происходит и при всех прочих неудачах. Если же все прошло успешно, возвращается true.

Функция не выполняет переименование файла, если его новое имя расположено в другой файловой системе (на другой смонтированной системе в Unix или на другом диске в Windows). Так что никогда не используйте rename() для получения загруженного по HTTP файла — ведь временный каталог /tmp вашего хостинг-провайдера скорее всего располагается на отдельном разделе диска.


bool unlink(string $filename)


Удаляет файл с именем $filename. В случае неудачи возвращает false, иначе — true.

На самом-то деле файл удаляется только в том случае, если число "жестких" ссылок на него стало равным 0. Правда, эта схема специфична для Unix-систем.


list File(string $filename)


Считывает файл с именем $filename целиком и возвращает массив-список, каждый элемент которого соответствует строке в прочитанном файле. Функция работает очень быстро — гораздо быстрее, чем если бы мы использовали fopen() и читали файл по одной строке. Неудобство этой функции состоит в том, что символы конца строки (обычно \n), не вырезаются из строк файла, а также не транслируются, как это делается для текстовых файлов.


array get_meta_tags(string $filename, int $use_include_path=false);


Функция открывает файл и ищет в нем все тэги до тех пор, пока не встретится закрывающий тэг . Если очередной тэг имеет вид:





то пара название=>содержимое добавляется в результирующий массив, который под конец и возвращается. Функцию удобно использовать для быстрого получения всех метатегов из указанного файла (что работает гораздо быстрее, чем соответствующее использование fopen() и затем чтение и разбор файла по строкам). Если необязательный параметр $use_include_path установлен, то поиск файла осуществляется не только в текущем каталоге, но и во всех тех, которые назначены для поиска инструкциями include и require.


6. Блокирование файла


При интенсивном обмене данными с файлами в мультизадачных операционных системах встает вопрос синхронизации операций чтения/записи между процессами. Например, пусть у нас есть несколько "процессов-писателей" и один "процесс-читатель". Необходимо, чтобы в единицу времени к файлу имел доступ лишь один процесс-писатель, а остальные на этот момент времени как бы "подвисали", ожидая своей очереди. Это нужно, например, чтобы данные от нескольких процессов не перемешивались в файле, а следовали блок за блоком. Как мы можем этого достигнуть?

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

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

Рекомендательная блокировка работает точно таким же образом. А именно, процессы, которые ей пользуются, будут работать с разделяемым файлом правильно, а остальные… как-нибудь да будут, пока не произойдет "столкновение".

С другой стороны, "жесткая блокировка" (которая в PHP не поддерживается) подобна шлагбауму: никто не сможет проехать, пока его не поднимут.

Единственная функция, которая занимается управлением блокировками в PHP, называется flock().


bool flock(int $f, int $operation [, int& $wouldblock])


Функция устанавливает для указанного открытого дескриптора файла $f режим блокировки, который бы хотел получить текущий процесс. Этот режим задается аргументом $operation и может быть одной из следующих констант:

LOCK_SH (или 1) — разделяемая блокировка;

LOCK_EX (или 2) — исключительная блокировка;

LOCK_UN (или 3) — снять блокировку;

LOCK_NB (или 4) — эту константу нужно прибавить к одной из предыдущих, если вы не хотите, чтобы программа "подвисала" на flock() в ожидании своей очереди, а сразу возвращала управление.

В случае, если был затребован режим без ожидания, и блокировка не была успешно установлена, в необязательный параметр-переменную $wouldblock будет записано значение истина true.

В случае ошибки функция, как всегда, возвращает false, а в случае успешного завершения — true.

Типы блокировок

Исключительная блокировка

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

Отсюда и название блокировки, которую процесс должен для себя установить. Вызвав функцию flock($f,LOCK_EX), он может быть абсолютно уверен, что все остальные процессы не начнут без разрешения писать в файл, пока он не выполнит все свои действия и не вызовет flock($f, LOCK_UN) или не закроет файл.

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

Рассмотрим, как в общем случае должен быть устроен процесс-писатель, желающий установить для себя исключительную блокировку:

Модель процесса с исключительной блокировкой


// инициализация

// . . .

$f=fopen($f,"a+") or die("Не могу открыть файл на запись!");

flock($f,LOCK_EX); // ждем, пока мы не станем единственными

// В этой точке мы можем быть уверены, что только эта

// программа работает с файлом

// . . .

fflush($f); // записываем все изменения на диск

flock($f,LOCK_UN); // говорим, что мы больше не будем работать с файлом

fclose($f);

// Завершение

// . . .

?>

Заметьте, что при открытии файла мы использовали не деструктивный режим w (который удаляет файл, если он существовал), а более "мягкий" — a+. Это неспроста. Посудите сами: удаление файла идеологически есть изменение его содержимого. Но мы не должны этого делать до получения исключительной блокировки (вспомните пример со светофором)! Поэтому, если вам нужно обязательно каждый раз стирать содержимое файла, ни в коем случае не используйте режим открытия w — применяйте a+ и функцию ftruncate(), описанную выше. Например:

$f=fopen($f,"a+") or die("Не могу открыть файл на запись!");

flock($f,LOCK_EX); // ждем, пока мы не станем единственными

ftruncate($f,0); // очищаем все содержимое файла

Зачем мы используем fflush() перед тем, как разблокировать файл? Все очень просто: отключение блокировки не ведет к сбросу внутреннего файлового буфера, т. е. некоторые изменения могут быть "сброшены" в файл уже после того, как блокировка будет снята. Мы, разумеется, этого не хотим, вот и заставляем PHP принудительно записать все изменения на диск.

Устанавливайте исключительную блокировку, когда вы собираетесь изменять файл. Всегда используйте при этом режим открытия r, r+ или a+. Никогда не применяйте режим w. Снимайте блокировку так рано, как только сможете, и не забывайте перед этим вызвать fflush().

Разделяемая блокировка

Мы решили ровно половину нашей задачи. Действительно, теперь данные из нескольких процессов-писателей не будут перемешиваться, но как быть с читателями? А вдруг процесс-читатель захочет прочитать как раз из того места, куда пишет процесс-писатель? В этом случае он, очевидно, получит "половинчатые" данные. То есть, данные неверные. Как же быть?

Существуют два метода обхода этой проблемы. Первый — это использовать все ту же исключительную блокировку. Действительно, кто сказал, что исключительную блокировку можно применять только в процессах, изменяющих файл? Ведь функция flock() не знает, что будет выполнено с файлом, для которого она вызвана. Однако этот метод довольно-таки неудачен, и вот по какой причине. Представьте, что процессов-читателей много, а писателей — мало, и к тому же писатели еще и вызываются, скажем, раз в пару минут, а не постоянно, как читатели. В случае использования исключительной блокировки для процессов-читателей, довольно интенсивно обращающихся к файлу, мы очень скоро получим целый их рой, висящий, недовольно гудя, в очереди, пока очередному процессу разрешат читать. Но ведь никакой "аварии" не случится, если один и тот же файл будут читать и сразу все процессы этого роя, правда? Ведь чтение из файла его не изменяет. Итак, предоставив исключительную блокировку для читателей, мы потенциально получаем проблемы с производительностью, перерастающие в катастрофу, когда процессов-читателей становится больше некоторого определенного порога.

Второй (и лучший) способ подразумевает использование разделяемой блокировки. Процесс, который устанавливает этот вид блокировки, будет приостановлен только в одном случае: когда активен другой процесс, установивший исключительную блокировку. Процессы-читатели будут "поставлены в очередь" только тогда, когда активизируется процесс-писатель. И это правильно. Посудите сами: зачем зажигать красный свет на перекрестке, если поперечного движения заведомо нет?

Теперь давайте посмотрим на разделяемую блокировку читателей с точки зрения процесса-писателя. Что он должен делать, если кто-то читает из файла, в который он как раз собирается записывать? Очевидно, он должен дождаться, пока читатель не закончит работу. Иными словами, вызов flock($f,LOCK_EX) обязан подождать, пока активна хотя бы одна разделяемая блокировка. Это и происходит в действительности.

Модель процесса с разделяемой блокировкой


Глава 15. Работа с файлами 265

// инициализация

// . . .

$f=fopen($f,"r") or die("Не могу открыть файл на чтение!");

flock($f,LOCK_SH); // ждем, когда процессы-писатели угомонятся

// В этой точке мы можем быть уверены, что эта программа работает

// с файлом, когда ни одна другая программа в него не пишет

// . . .

flock($f,LOCK_UN); // говорим, что мы больше не будем работать с файлом

fclose($f);

// Завершение

// . . .

?>

Устанавливайте разделяемую блокировку, когда вы собираетесь только читать из файла, не изменяя его. Всегда используйте при этом режим открытия r, и никакой другой. Снимайте блокировку так рано, как только сможете.


Пример


В данном примере будет использоваться форма заказа, измененная по сравнению с той, что мы рассматривали в предыдущей работе.

Новый вариант формы представлен на рис.





Поле формы для ввода адреса доставки имеет имя address. В результате мы располагаем переменной, к которой при обработке формы в РНР можно обращаться как к $address при условии, что установлен флаг register_globals.

Каждый из поступающих заказов записывается в один файл.

Скрипт processorder.php для обработки формы приведен ниже:



// Создать короткие имена переменных

$tireqty = $HTTP_POST_VARS['tireqty'];

$oilqty = $HTTP_POST_VARS['oilqty'];

$sparkqty = $HTTP_POST_VARS['sparkqty'];

$address = $HTTP_POST_VARS['address'];

$DOCUMENT_ROOT = $HTTP_SERVER_VARS['DOCUMENT_ROOT'];

?>











Автозапчасти от Боба



Результаты заказа




$totalqty = 0;

$totalqty += $tireqty;

$totalqty += $oilqty;

$totalqty += $sparkqty;

$totalamount = 0.00;

define('TIREPRICE', 100);

define('OILPRICE', 10);

define('SPARKPRICE', 4);

$date = date('H:i, jS F');

echo '
Заказ обработан в ';

echo $date;

echo '
';

echo '
Список вашего заказа:';

echo '
';


if( $totalqty == 0 )

{

echo 'Вы ничего не заказали на предыдущей странице!
';

}

else

{

if ( $tireqty>0 )

echo $tireqty.' автопокрышек
';

if ( $oilqty>0 )

echo $oilqty.' бутылок с маслом
';

if ( $sparkqty>0 )

echo $sparkqty.' свечей зажигания
';

}


$total = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE; 

$total=number_format($total, 2, '.', ' ');

echo '
Итого по заказу: '.$total.'
';

echo '
Адрес доставки: '.$address.'
';


$outputstring = $date."\t".$tireqty." автопокрышек \t".$oilqty." масла\t"

.$sparkqty." свечей\t\$".$total

."\t". $address."\n";


// Открыть файл для добавления

$fp = fopen("orders.txt", 'a');


flock($fp, LOCK_EX); 

if (!$fp)

{

echo '
В настоящий момент ваш запрос не может быть обработан. '

.'Пожалуйста, попытайтесь позже.

';

exit;

} 


fwrite($fp, $outputstring);

flock($fp, LOCK_UN); 

fclose($fp);


echo '
Заказ сохранен.
'; 


?>






Ниже расположен РНР-скрипт для считывания файла

// Создать короткие имена переменных

$DOCUMENT_ROOT = $HTTP_SERVER_VARS['DOCUMENT_ROOT'];

?>

Автозапчасти

Заказы клиентов

@ $fp = fopen("orders.txt", 'r');

flock($fp, LOCK_SH);

if (!$fp)

{

echo '
Нет ожидающих заказов.'

.'Пожалуйста, попытайтесь позже.
';

exit;

}

while (!feof($fp))

{

$order= fgets($fp, 999);

echo $order.'
';

}

flock($fp, LOCK_UN);

fclose($fp);

?>

Задания.

  1.  Создать «гостевую книгу» в виде формы, на которой расположены несколько полей для ввода информации о посетителе а также таблица, в которой отображены сведения о всех посетителях. Сведения о каждом посетителях сохранять в текстовом файле.
  2.  Создать страницу и организовать счетчик ее посещений в виде текстового файла. При открытии страницы отображать сведения о номере посетителя.
  3.  Создать файл, в котором содержатся рецепты приготовления блюд. Описания блюд добавлять в файл с помощью соответствующей формы.
  4.  Создать текстовый файл логинов и паролей для доступа к секретной информации. Создать форму для ввода логина и пароля. В случае правильного (неправильного) ввода отобразить соответствующую информацию.
  5.  Создать форму для ввода имени и содержимого текстового файла с кнопкой, при нажатии которой этот файл создается. Отдельно создать форму с посеем ввода имени файла и кнопкой, при нажатии на которую этот файл удаляется.


 

А также другие работы, которые могут Вас заинтересовать

12880. ГОЛОС ЧУЖОЙ ПЛАНЕТЫ 71 KB
  ГОЛОС ЧУЖОЙ ПЛАНЕТЫ Вашему вниманию предлагается иградрама. Мы играли в нее не только со старшеклассниками но и с педагогами представителями администрации психологами. Игра эта сложная как для проводящих ее так и для игроков. Она предполагает создание ситуации в...
12881. ПУТЕШЕСТВИЕ К ВОЛШЕБНИКУ 96.5 KB
  ПУТЕШЕСТВИЕ К ВОЛШЕБНИКУ Предлагаемую ниже игру можно использовать и как самостоятельную процедуру и в рамках психологического тренинга для подростков. В последнем случае игра встраивается в программу тренинга в форме отдельного занятия в котором представлены все...
12882. Психологическая игра Война племен 37.5 KB
  Психологическая игра Война племен Цель: развитие внутригрупповых отношений; навыков коллективного взаимодействия снятие агрессии. Участники игры: учащиеся 68 классов. Время проведения занятия: 1час 30 мин. Предполагаемый психологический результат: улучшение взаи...
12883. Дороги, которые мы выбираем. Сценарий мероприятия по актуальным проблемам подросткового возраста 41 KB
  Сценарий мероприятия по актуальным проблемам подросткового возраста Дороги которые мы выбираем... В конкурсе принимают участие ученики 9 11го класса. Соревнуются 2 команды по 12 человек. Члены команды: капитан; прессцентр 2 чел.; выездная бригада 3чел.; члены команд
12884. Здоровье и моя будущая профессия 41 KB
  Здоровьесберегающие технологии в воспитании и развитии детей. Круглый стол Здоровье и моя будущая профессия Программное содержание. Учить детей снимать эмоциональное и физическое напряжение преодолевать чувство тревоги связанное с межличностным общением. Форм...
12885. Сценарий психологической игры: «Кораблекрушение» 69.5 KB
  Сценарий психологической игры: Кораблекрушение для учеников 11го класса В период ранней юности 1517 лет человек переживает кризис идентичности. Этот возраст сопровождается активным поиском самого себя в социуме сверстников и взрослых. Конфликты как эмоционально...
12886. Игра в работе педагогапсихолога. МЫ ЕДЕМ, ЕДЕМ, ЕДЕМ 105.5 KB
  Игра в работе педагогапсихолога: Мы едем едем едем Человек есть €œчеловек играющий€ homo ludens. Хейзенга. Игра: €œ МЫ ЕДЕМ ЕДЕМ ЕДЕМ€ Время игры: 1 час – 1 час 20 минут Возможности игры: игра разработана для детей в возрасте 10 – 14 лет. Цель: мотивация учащихся на и
12887. ПРОБУЖДЕНИЕ АКТИВНОСТИ 46.5 KB
  ПРОБУЖДЕНИЕ АКТИВНОСТИ Сценарий классного часа Вам приходилось слышать от взрослых в школе высказывания о том что современные дети ничего не хотят что растет поколение потребителей И действительно мы можем найти этому массу подтверждений. Чем лучше школа тем боль
12888. Развитие творческих способностей учащихся подросткового возраста 51.5 KB
  Классный час Развитие творческих способностей учащихся подросткового возраста Цель: познание и раскрытие учениками своих потенциальных способностей к творчеству. Задачи: развитие познавательных психологических процессов: памяти внимания мышления; разви