<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

После прохождения курса Вы без труда сможете создавать любые сайты с использованием фреймворка Yii, причём делать это будете быстро и качественно.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Реализация методов статическим образом
13.06.2013 15:43:42 Реализация методов статическим образом Сообщение #1
olegvasil

olegvasil

Эксперт

Эксперт

Дата регистрации:
25.03.2013 22:27:59

Сообщений: 104

Добрый день.Нужно сделать методы по загрузке файло в на сервер статическими .Обычные методы работают нормально а статические требуют чтобы св-ва , которые они используют были статичнские
вот код формы
<?php
require_once "lib/uoload_image_class.php";
require_once "lib/upload_text_class.php";
if($_POST["upload"]){
$upload_text = new UploadText();
$upload_image = new UploadImage();
$success_text = $upload_text->uploadFile($_FILES["text"]);
$success_image = $upload_image->uploadFile($_FILES["image"]);
}
?>
<html>
<head>
<title>Загрузка файлов</title>
</head>
<body>
<?php
if($_POST["upload"]){
if($success_text) echo "Текстовый файл успешно загруженю"."<br/>";
else echo "Ошибка загрузки текстовго файла"."<br/>";

if($success_image) echo "Изображение успешно загружено"."<br/>";
else echo "Ошибка загрузки изображения"."<br/>";
}
?>
<form name = "myform" action = "index.php" method = "post" enctype = "multipart/form-data">
<table>
<tr>
<td>Изображение...</td>
<td>
<input type = "file" name = "image" />
</td>
</tr>
<tr>
<td>Text...</td>
<td>
<input type = "file" name = "text" />
</td>
</tr>
<tr>
<td colspan = "2">
<input type = "submit" name = "upload" value = "Загрузить файлы" />
</td>
</tr>
</table>
</form>
</body>
</html>
код скрипта
<?php

abstract class Upload {

protected $dir;
protected $mime_types;

public static function uploadFile($file){
if(!self::isSecurity($file)) return false;
$uploadfile = $this->dir."/".$file["name"];
return move_uploaded_file($file["tmp_name"],$uploadfile);
}


protected static function isSecurity($file){
$blacklist = array(".php",".phtml",".php3",".php4",".html",".htm";
foreach ($blacklist as $item){
if(preg_match("/$item\$/i",$file["name"])) return false;
}
$type = $file["type"];
for($i = 0;$i < count($this->mime_types);$i++){
if($type = $this->mime_types[$i]) break;
if($i + 1 == count($this->mime_types)) return false;
}

$size = $file["size"];
if($size > 2048000) return false;
return true;
}
}
?>
<?php
require_once "upload_class.php";

class UploadText extends Upload{
protected $dir = "text";
protected $mime_types = array("text/plain";

}
?>
<?php
require_once "upload_class.php";

class UploadImage extends Upload{
protected $dir = "images";
protected $mime_types = array("image/png","image/jpg","image/gif";

}
?>
Профиль Ответить
13.06.2013 17:14:07 Реализация методов статическим образом Сообщение #2
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

И свойства тоже надо сделать статическими.
Профиль Ответить
13.06.2013 18:03:18 Реализация методов статическим образом Сообщение #3
olegvasil

olegvasil

Эксперт

Эксперт

Дата регистрации:
25.03.2013 22:27:59

Сообщений: 104

Сделал и методы и свойства статическими .Кампилятор не каких ошибок не выдает , но файл грузится только во временную директорию вот исправленные исходники кода
<?php

abstract class Upload {

protected static $dir;
protected static $mime_types;

public static function uploadFile($file){
if(! self::isSecurity($file)) return false;
$uploadfile = self::$dir."/".$file["name"];
return move_uploaded_file($file["tmp_name"],$uploadfile);
}


protected static function isSecurity($file){
$blacklist = array(".php",".phtml",".php3",".php4",".html",".htm";
foreach ($blacklist as $item){
if(preg_match("/$item\$/i",$file["name"])) return false;
}
$type = $file["type"];
for($i = 0;$i < count(self::$mime_types);$i++){
if($type = self::$mime_types[$i]) break;
if($i + 1 == count(self::$mime_types)) return false;
}

$size = $file["size"];
if($size > 6048000) return false;
return true;
}
}
?>

<?php
require_once "upload_class.php";

class UploadText extends Upload{
protected static $dir = "text";
protected static $mime_types = array("text/plain";

}
?>


<?php
require_once "upload_class.php";

class UploadImage extends Upload{
protected static $dir = "images";
protected static $mime_types = array("image/png","image/jpg","image/gif";

}
?>


<?php
require_once "upload_class.php";

class UploadMuzik extends Upload{
protected static $dir = "music";
protected static $mime_types = array("audio/mpeg";

}
?>


<?php
require_once "lib/uoload_image_class.php";
require_once "lib/upload_text_class.php";
require_once "lib/upload_micik_class.php";
if($_POST["upload"]){
$success_text = UploadText::uploadFile($_FILES["text"]);
$success_image = UploadImage::uploadFile($_FILES["image"]);
$success_musik = UploadMuzik::uploadFile($_FILES["muzik"]);
print_r($_FILES['muzik']);
}
?>
<html>
<head>
<title>Загрузка файлов</title>
</head>
<body>
<?php
if($_POST["upload"]){
if($success_text) echo "Текстовый файл успешно загруженю"."<br/>";
else echo "Ошибка загрузки текстовго файла"."<br/>";

if($success_image) echo "Изображение успешно загружено"."<br/>";
else echo "Ошибка загрузки изображения"."<br/>";

if($success_musik) echo "Музыкальный файл успешно загружено"."<br/>";
else echo "Ошибка загрузки музыкального файла"."<br/>";
}
?>
<form name = "myform" action = "index.php" method = "post" enctype = "multipart/form-data">
<table>
<tr>
<td>Изображение...</td>
<td>
<input type = "file" name = "image" />
</td>
</tr>
<tr>
<td>Text...</td>
<td>
<input type = "file" name = "text" />
</td>
</tr>
<tr>
<td>Musik...</td>
<td>
<input type = "file" name = "muzik" />
</td>
</tr>
<tr>
<td colspan = "2">
<input type = "submit" name = "upload" value = "Загрузить файлы" />
</td>
</tr>
</table>
</form>
</body>
</html>
Профиль Ответить
13.06.2013 18:53:28 Реализация методов статическим образом Сообщение #4
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

А эту ошибку уже надо искать вот этим методом: http://myrusakov.ru/php-finderror.html
Профиль Ответить
14.06.2013 10:31:23 Реализация методов статическим образом Сообщение #5
olegvasil

olegvasil

Эксперт

Эксперт

Дата регистрации:
25.03.2013 22:27:59

Сообщений: 104

Проблема почему-то вот в этой строке $uploadfile = self::$dir."/".$file["name"]; Если убрать слеш то скрипт сохраняет загруженные файлы в той папке шде он находится сам.Несмотря на переопределение свойста $dir в каждом наследуемым классом
Профиль Ответить
14.06.2013 17:32:31 Реализация методов статическим образом Сообщение #6
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Хорошо, теперь осталось понять, почему self::$dir ничего не содержит.
Профиль Ответить
15.06.2013 20:52:00 Реализация методов статическим образом Сообщение #7
olegvasil

olegvasil

Эксперт

Эксперт

Дата регистрации:
25.03.2013 22:27:59

Сообщений: 104

Наверно потому что он является абстрактным сам класс но в его наследниках это поле переопределяется
Профиль Ответить
26.06.2013 03:30:01 Реализация методов статическим образом Сообщение #8
Next_Episode

Next_Episode

Новичок

Новичок

Дата регистрации:
26.06.2013 03:22:58

Сообщений: 15

здравствуйте..
решаю ту же задачу..

вот если переопределить все методы и свойства в классах наследниках, то всё работает, но код кажется очень громоздким..тогда не вижу смысла в классе-родителе
Профиль Ответить
26.06.2013 09:32:06 Реализация методов статическим образом Сообщение #9
Next_Episode

Next_Episode

Новичок

Новичок

Дата регистрации:
26.06.2013 03:22:58

Сообщений: 15

<?php
abstract class upld {

abstract public function gdir();
abstract public function gm_types();

public function uploadFile($file,$dr,$m_types) {
if(!self::isSecurity($file,$m_types)) return false;

$uploadfile =$dr."/".$file['name'];

return move_uploaded_file($file['tmp_name'], $uploadfile);
}

protected function isSecurity($file,$m_types) {

$blacklist=array(".php",".phtml",".php3",".php4",".html",".htm";

foreach($blacklist as $item) {
if(preg_match("/$item\$/i",$file["name"]))
return false;
}

$type=$file["type"];

for($i=0;$i<count($m_types);$i++) {
if($type==$m_types[$i]) break;
if($i+1==count($m_types)) return false;
}

$size=$file["size"];
if($size>204800000) return false;

return true;
}

}

class upldt extends upld {

protected static $dir="text";
protected static $mime_types=array("text/plain";

public function gdir() {
return self::$dir;
}
public function gm_types() {
return self::$mime_types;
}

}

class upldi extends upld {

protected static $dir="images";
protected static $mime_types=array("image/jpeg","image/png","image/gif";

public function gdir() {
return self::$dir;
}
public function gm_types() {
return self::$mime_types;
}

}

class upldm extends upld {

protected static $dir="music";
protected static $mime_types=array("audio/mpeg";

public function gdir() {
return self::$dir;
}
public function gm_types() {
return self::$mime_types;
}

}



if($_POST['s1']) {

$succT=upldt::uploadFile($_FILES['text'],upldt::gdir(),upldt::gm_types());
$succI=upldi::uploadFile($_FILES['image'],upldi::gdir(),upldi::gm_types());
$succM=upldm::uploadFile($_FILES['music'],upldm::gdir(),upldm::gm_types());

}

?>
<!DOCTYPE html>
<html>
<head>
<title>ЗАГРУЗКА ФАЙЛОВ</title>
</head>
<body>
<?php
if($_POST['s1']) {
if($_FILES["text"]["name"]) {
if($succT) echo "Тестовый файл загружен успешно<br/>";
elseif(!$succT) echo "Ошибка загрузки текстового файла<br/>";
}
else echo "Вы не выбрали текстовой файл для загрузки<br/>";
if($_FILES["image"]["name"]) {
if($succI) echo "Изображение загружено успешно<br/>";
elseif(!$succI) echo "Ошибка загрузки изображения<br/>";
}
else echo "Вы не выбрали изображение для загрузки<br/>";

if($_FILES["music"]["name"]) {
if($succM) echo "Музыка загружена успешно<br/>";
elseif(!$succM) echo "Ошибка загрузки музыки<br/>";
}
else echo "Вы не выбрали музыку для загрузки<br/>";
}

?>
<form action='static3.php' method='post' enctype='multipart/form-data'>
<table>
<tr>
<td>Текстовый файл:</td>
<td><input type='file' name='text'/></td>
</tr>
<tr>
<td>Изображение:</td>
<td><input type='file' name='image'/></td>
</tr>
<tr>
<td>Музыка:</td>
<td><input type='file' name='music'/></td>
</tr>
<tr>
<td colspan='2'><input type='submit' name='s1' value='Загрузить файлы'/></td>
</tr>
</table>
</form>
</body>
</html>



ну один из вариантов реализации, работает, вот только не знаю, это требовалось??
есть и первоначальная задумка, в родительском классе объявить абстрактные функции и всё, а в наследниках прописать статические переменные и описание функций...но как-то это всё хрупко..
если можно, подкиньте идею, может есть вариант по-проще.
Профиль Ответить
07.07.2013 20:04:03 Реализация методов статическим образом Сообщение #10
dr.arthu

dr.arthu

Новичок

Новичок

Дата регистрации:
24.04.2013 13:37:07

Сообщений: 2

Потому-что исползуеться переменная $dir из абстрактного класса, так как self::$dir. Тоже решаю эту задачу и та-же проблема, пытался для каждого класса отдельно сделать upload но тогда загружает либо оба файла в text либо оба файла в images. В чем фишка?
Профиль Ответить