Все ленты — последние статьи

Upload файлов, и все с этим связанное

Краткий эксурс в upload
Настройка сервера
Дополнительные возможности
Краткий очерк о правах на файлы
Пример кода

Краткий эксурс в upload

Что такое Upload files, или почему не работает
copy ("c:imagessample.jpg", "c:uploads sample.jpg ")

Даже если у Вас в распоряжении всего один компьютер, на котором совмещен и сервер и рабочая станция, не стоит забывать о том, что php использует технологию клиент/сервер. Файл, который мы хотим загрузить, как правило, находится на машине клиента, т.е. пользователя, обыкновенного посетителя сайта. Место назначения — сервер. Для того чтобы совершить процесс передачи файла, нам понадобиться следующая форма:

<form enctype="multipart/form-data" action="/upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

Подробнее: Upload файлов, и все с этим связанное

Работа с файлами в PHP

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

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

Пример

Выносим меню нашего сайта в отдельный файл. Назовем его 'menu.txt' и разместим в той же папке, что и index.php, а вместо кода меню вводим

<?
include ("menu.txt");
?>

Подробнее: Работа с файлами в PHP

Глава 20. Использование удалённых/remote файлов

Если поддержка "URL fopen-оболочки/wrapper" включена при конфигурировании PHP (если вы только не передали явным образом флаг --disable-url-fopen-wrapper для конфигурирования (для версий, новее 4.0.3) или не установили allow_url_fopen в off в файле php.ini (для более новых версий)), вы можете использовать HTTP и FTP- URL'ы с большинством функций, которые принимают filename/имя файла в качестве параметра, в том числе — операторы require() и include().

Примечание: Windows-версия PHP в настоящее время не поддерживает удалённый доступ к файлам для следующих функций: include(), include_once(), require() require_once().

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

 Пример 20-1. Получение названия/title удалённой страницы
<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
echo "<p>Unable to open remote file.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
/* Это будет работать, только если title и его тэги расположены в одной строчке */
if (eregi ("<title>(.*)</title>", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>

Вы можете также записывать в файлы по FTP, если соединены как пользователь с корректными правами доступа и если файл ещё не существует. Для соединения как любой пользователь, кроме 'anonymous', вам необходимо специфицировать username (и, возможно, password) в URL, как, например: 'ftp://user:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра./path/to/file'. (Вы можете использовать тот же синтаксис для доступа к файлам по HTTP, если необходима Basic-аутентификация.)

Пример 20-2. Сохранение данных на удалённом сервере
<?php
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$file) {
echo "<p>Unable to open remote file for writing.\n";
exit;
}
/* Здесь записываются данные. */
fputs ($file, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($file);
?>

Примечание: из этого примера у вас может возникнуть идея использовать эту технику для записи в удалённый log, но, как указано выше, вы можете записывать только в новый файл с использованием оболочек URL fopen(). Для выполнения распределённого логинга, вроде этого, вы должны просмотреть

Как узнать размер файла на каком-то веб-сервере

Первый способ: скачать и посмотреть.

Второй способ описан здесь.

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

<?

$fname='/path-to-file/big-big-big.mpg';
$fhost='www.super-mega.ru';

$x=0;
$fp = fsockopen($fhost, 80, &$errno, &$errstr, 30) or die("облом");

fputs($fp,"HEAD $fname HTTP/1.0nHOST: $fhostnn");
while(!feof($fp)) $x.=fgets($fp,128);
fclose($fp);

if (ereg("Content-Length: ([0-9]+)",$x,$size)) echo "Размер файла $size[1] байт";
else echo "Определить невозможно";

?>

Грамотная работа с файлами: исключительная блокировка файлов

Итак, начнем с того, что же такое исключительная блокировка файла и для чего она необходима. Не секрет, что множество сайтов хранят свою информацию не в базах данных, а в простых тестовых файлах. Здесь мы не будем спорить, что лучше и хуже, мы просто поговорим о специфике работы с данными, хранящимися в файлах. Эти данные могут иметь различные форматы, различные структуры, но так или иначе манипуляцию этими данными мы должны взять на себя. Нужно четко понимать, что это бывает иногда сложней, чем кажется на первый взгляд. Действительно, когда Вы тестируете свои скрипты, все кажется идеальным: информация добавляется, информация удаляется… Но стоит только начать работу в сети и ситуация может кардинально измениться. В ситуации, когда со скриптом работает одновременно большое количество людей очень важно не потерять контроль над операциями работы с файлом. Возможны ситуации, когда двое или более людей одновременно запросят операции записи в файл и произойдет серьезный сбой, который повлечет потерю информации. Модель исключительной блокировки предотвращает подобные ситуации, "разруливая" процессы , работающие с файлом и не давая им одновременно выполнять опасные операции.

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

<?
$fp = fopen ("path_to_file","a");//ОТКРЫТИЕ
fputs($fp ,"$datarn");//РАБОТА С ФАЙЛОМ
fclose ($fp);//ЗАКРЫТИЕ
?>

Подробнее: Грамотная работа с файлами: исключительная блокировка файлов