Просто рабочий конспект
Куки - набор пар имя-значение, хранящиеся на клиенте в привязке к конкретному сайту.
setcookie(name[, value[, expiryTime[, path[, domain[, secure[,httpOnly]]]]]])
Должна использоваться до отправки актуального контента (аналогично header()) !
Разные браузеры могут вводить ограничения на количество куков.
Чтобы обойти возможные ограничения браузеров, используются сессии.
Если куки хранятся на клиенте, то сессии - на web-сервере.
В качестве куки в этом случае хранится тоько id сессии юзера.
Разрешение на сессии прописывается в файле php.ini.
До передачи контента вызывается функция:
session_start(); $_SESSION['password'] = 'mypassword'; unset($_SESSION['password']); $_SESSION = array(); session_destroy();
Браузер передаёт id сессии каждый раз при запросе страницы.
Для работы с файлами используются функции:
$html = file_get_contents($srcurl); $result=file_put_contents($tempfilename, $html); file_exists($tempfilename); unlink($tempfilename); copy($tempfilename, $targetfilename);
Что интересно, если в функции file_get_contents($srcurl) в значении $srcurl стоит url, например, "http://prostophp.blogspot.com/2010/10/cookies-sessions-and-access-control.html", то результатом будет не содержание файла, а результат обработки файла браузером, т.е.html - контент!
Всё, что нужно для upload - выгрузки файла с клиента на сервер:
<form action="index.php" method="post" enctype="multipart/form-data">
<div><label id="my_files">Select file to upload:
<input type="file" id="upload" name="upload"/></label> </div>
<div><input type="hidden" name="action" value="upload"/> <input type="submit" value="Submit"/>
</div>
</form>
PHP - скрипт index.php обрабатывает просабмиченную форму.
Информация о файле хранится в глобальном массиве $_FILES['my_files'].
$_FILES[ ]['tmp_name'] - имя загруженного на web-сервер файла во временный каталог (параметр upload_tmp_dir в php.ini)
$_FILES[ ]['name'] - имя исходного файла на клиенте до сабмита
$_FILES[ ]['size'] - размер файла в байтах
$_FILES[ ]['type'] - MIME type файла (text/plain, image/gif,image/jpeg,image/png,..)
Ограничение макс. размера файла - через параметр upload_max_filesize в php.ini.
Проверять через параметр $_FILES[ ]['size'] нет смысла, т.к. файл уже загружен на сервер.
Создание уникального имени файла, например:
$filename = 'C:/uploads/' . time() . $_SERVER['REMOTE_ADDR'] . $ext;
Безопасное копирование файла:
if (!is_uploaded_file($_FILES['upload']['tmp_name']) or
!copy($_FILES['upload']['tmp_name'], $filename)) { обработка ошибки ...}
Очень важная функция - is_uploaded_file().
Проверяет, действительно ли этот файл был загружен в результате сабмита формы.
Просмотр загруженных файлов.
Размер файла передаётся в заголовке:
header('Content-length: ' . strlen($filedata));
Тип файла:
header("Content-type: $mimetype");
Имя файла:
header("Content-disposition: inline; filename=$filename");
Извлекаем файл из базы:
$sql = "SELECT filename, mimetype, filedata FROM filestore WHERE id = '$id'"; ... $file = mysqli_fetch_array($result); $filename = $file['filename'];
$mimetype = $file['mimetype'];
$filedata = $file['filedata'];
$disposition = 'inline'; // просмотр на месте if ($_GET['action'] == 'download')
{
$mimetype = 'application/x-download';
$disposition = 'attachment';
}
header("Content-type: $mimetype");
header("Content-disposition: $disposition; filename=$filename");
header('Content-length: ' . strlen($filedata)); echo $filedata;
Ярлыки: Access Control, Binaty Data, Cookies, Sessions Подпишись на новости PHP по e-mail |