|
|
|
| Доброго времени суток.
Посоветуйте как решить проблему и в чем моя ошибка.
мне нужно было организовать загрузку графических файлов на сайт, сделала
проверки, а потом решила проверить, что призойдет, если загрузить тяжелыйвидео
видеофайл. он выдал вот такую ошибку -
Warning: POST Content-Length of 391688685 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
Warning: Cannot modify header information - headers already sent in Z:\home\new2\www\downloadPic.php on line 5
и подвесил комп....
теперь вопрос - как избежать подобной ситуации?
форма загрузки -
<?php
require ('pageHtmlCreate.php');
require ('imagE.php');
require ('systemMessage.php');
$page = new pageHtmlCreate('Главная');
$page->htmlBegining();
if (isset($_GET['messId'])){
try {
$base = new PDO('mysql:host=localhost; dbname=domdverei', 'root', '',
array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES CP1251'));
$message = new systemMessage($_GET['messId'], $base);
$message->sysMessage();
unset($_GET['messId']);
$message = NULL;
}
catch (Exception $e){
echo $e->getMessage();
}
}
?>
<form action="downloadPic.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="text" name="mainDir"><br>
<input type="text" name="dir"><br>
<input type="text" name="subDir"><br>
<input type="text" name="imgTitle"><br>
<input type="submit" value="Загрузить"><br>
</form>
<?php
$page->htmlEnding();
?>
|
скрипт загрузки -
<?php
require ('imagE.php');
if ($_FILES['filename']['type'] != 'image/gif' || $_FILES['filename']['type'] != 'image/png' || $_FILES['filename']['type'] != 'image/jpeg'){
header("Location: http://".$_SERVER['HTTP_HOST'].'?messId=006');
exit;
}
function delChars($value){
$clearValue = htmlspecialchars(stripcslashes($value));
return $clearValue;
}
if (!isset($_POST['mainDir']) and !isset($_POST['dir']) and !isset($_FILES['filename']['name'])){
header("Location: http://".$_SERVER['HTTP_HOST'].'?messId=002');
exit;
}
if (!isset($_POST['subDir'])){
$subDir = '';
}
else{
$subDir = delChars($_POST['subDir']);
}
$mainDir = delChars($_POST['mainDir']);
$dir = delChars($_POST['dir']);
$imgTitle = delChars($_POST['imgTitle']);
$fileName = $_FILES['filename']['name'];
$fileTemp = $_FILES['filename']['tmp_name'];
try{
$base = new PDO('mysql:host=localhost; dbname=domdverei', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES CP1251'));
$image = new imagE($mainDir, $dir, $subDir, $fileName, $base);
$downloadImage = $image->downloadFile($imgTitle, $fileTemp);
if ($downloadImage != 'ok'){
header("Location: http://".$_SERVER['HTTP_HOST'].'?messId='.$downloadImage);
$image = NULL;
$base = NULL;
exit;
}
header("Location: http://".$_SERVER['HTTP_HOST']);
$image = NULL;
$base = NULL;
}
catch(Exception $e){
echo $e->getMessage();
}
?>
|
класс картинок -
<?php
class imagE {
private $fileName;
private $fileMainDirectory;
private $fileSubDirectory;
private $imageMainDir;
private $fileMainIndex;
private $db;
public function __construct($imageMainDir, $fileMainDirectory, $fileSubDirectory, $fileName, $db){
$this->fileName = $fileName;
$this->imageMainDir = $imageMainDir;
$this->fileMainDirectory = $fileMainDirectory;
$this->fileSubDirectory = $fileSubDirectory;
$this->db = $db;
}
public function __destructor(){
if (isset($this->db)){
$this->db = NULL;
}
}
private function fileSyntaxCheck($file){
if (!preg_match('/^[a-zA-Z0-9]{1}[-_a-zA-Z0-9]+[a-zA-Z0-9]{1}(.jpg|.jpeg|.png|.gif)$/', $file))
{
return false;
}
else{
return true;
}
}
private function dirSyntaxCheck($dir){
if (!preg_match('/^[a-zA-Z0-9]{1}[-_a-zA-Z0-9]+[a-zA-Z0-9]{1}$/', $dir))
{
return false;
}
else{
return true;
}
}
private function pathCheck(){
if (!empty($this->fileName))
{
$sql = "SELECT filename FROM pictures WHERE filename='$this->fileName'";
$sel=$this->db->query($sql)->fetch(PDO::FETCH_NUM);
print_r($sel);
}
$link=$this->createImgLink();
echo ($link);
file_exists($link) or die('Файл '.$this->fileName.' не существует.');
}
public function createImgLink(){
if (empty($this->fileName))
{
return '002'; //!!! Придумать код ошибки!!!!
}
if (empty($this->fileMainDirectory)){
echo ("<LI>Нет доступа к каталогу или каталог не существует.");
return;
}
if ($this->fileSyntaxCheck($this->fileName) == false){
echo ('Имя файла '.$this->fileName.' содержит недопустимые символы. Имя файла может содержать цифры, латинсике буквы и знак "-".');
return;
}
if ($this->dirSyntaxCheck($this->fileMainDirectory) == false){
echo ('Имя дирректории '.$this->fileMainDirectory.' содержит недопустимые символы. Имя дирректории может содержать цифры, латинсике буквы и знак "-".');
return;
}
if (empty($this->fileSubDirectory)){
$link = $this->imageMainDir.'/'.$this->fileMainDirectory.'/'.$this->fileName;
return $link;
}
if ($this->dirSyntaxCheck($this->fileSubDirectory) == false){
echo ('Имя дирректории '.$this->fileSubDirectory.' содержит недопустимые символы. Имя дирректории может содержать цифры, латинсике буквы и знак "-".');
}
$link = $this->imageMainDir.'/'.$this->fileMainDirectory.'/'.$this->fileSubDirectory.'/'.$this->fileName;
return $link;
}
public function downloadFile($imageTitle, $fileNameTmp){
$imageLink = $this->createImgLink();
if (strlen($imageLink)<=3){
return $imageLink;
}
if (file_exists($imageLink)==true){
return '001'; //!!Код ошибки если файл уже существует!!
}
$sql = "SELECT dirname, subdirname, filename FROM pictures WHERE filename='$this->fileName'";
$sel=$this->db->query($sql)->fetch(PDO::FETCH_NUM);
if ($this->imageMainDir.'/'.$sel[0].'/'.$sel[1].'/'.$sel[2]==$imageLink){
return '003';//Запись в базе существует однако файл отсутствует. Привести в соответствие
}
if (!is_uploaded_file($fileNameTmp)){
return '004'; //Если файл не загружен
}
$filePath = dirname($imageLink);
if (is_dir($filePath)==false){
return '005'; //Если нет пути
}
move_uploaded_file($fileNameTmp, $imageLink);
$ins = "INSERT INTO pictures (dirname, subdirname, filename, imagetitle) VALUES ('$this->fileMainDirectory', '$this->fileSubDirectory', '$this->fileName', '$imageTitle')";
$this->db->exec($ins);
return 'ok';
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Феля
(18.04.2013 в 16:29)
| | Код можно было не показывать, это связано с настройками сервера. Предупреждение гласит, что превышен установленный максимальный размер на POST загрузку - POST Content-Length of 391688685 bytes exceeds the limit of 8388608 bytes, а второе сообщение является следствием первого.
За размер загружаемого отвечают две директивы в php.ini:
post_max_size
upload_max_filesize
Такая проверка файлов, которую вы производите не годится, почитайте в сети об этом, написано по этому поводу много, повторяться не охота. | |
|
|
|