fopen

Открывает файл и привязывает его к дескриптору.
Синтаксис:

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

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

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

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

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

w+

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

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

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

tmpfile

Создает новый временный файл с уникальным именем и открывает его на чтение и запись.
Синтаксис:

int tmpfile()

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

popen()

Открывает файловый указатель процесса (PHP 3, PHP 4, PHP 5)

Описание:

resource popen(string command, string mode)

Открывает поток к процессу, выполняемую при помощи форкинга (forking) команды, заданной в command.

Возвращает файловый указатель, идентичный возвращаемому функцией fopen(), за исключением того, что он односторонний (может быть использован только для чтения или записи) и должен быть закрыт при помощи pclose(). Этот указатель может быть использован с fgets(), fgetss() и fwrite().

В случае возникновения ошибки, возвращает FALSE.

Замечание: Если вы ищите двустороннюю связь, используйте proc_open().

Пример использования функции popen()

<?php
$handle = popen("/bin/ls", "r");
?>

Если команда для выполнения не может быть найдена, будет возвращён действующий ресурс. Это может выглядить странно, но имеет смысл; это даёт вам возможность получить доступ к любому сообщению об ошибке, которое вернёт оболочка:

<?php
error_reporting(E_ALL);

/* Добавляем перенаправление чтобы прочитать stderr. */
$handle = popen('/path/to/spooge 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>

Замечание: В случае работы в безопасном режиме, вы можете запускать что-либо только в пределах safe_mode_exec_dir. В настоящее время, использование .. в пути запрещено

Внимание

В случае работы в безопасном режиме, все слова, следующие за начальной командой, рассматриваются как единый аргумент. То есть echo y | echo x будет работать как echo "y | echo x".