<MyRusakov.ru />

Финансовая грамотность от А до Я

Финансовая грамотность от А до Я

Данный курс в кратчайшие сроки обучит Вас финансовой грамотности. Эти знания позволят Вам получить, как минимум, серьёзную финансовую стабильность, а, как максимум, финансовую независимость.

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

Помимо самого курса Вас ждёт ещё бесплатный ценный Бонус: «Ранний выход на пенсию». В рамках этого Бонуса Вы узнаете, какой должен быть капитал конкретно в Вашем случае, варианты его получения, а также какие есть стратегии вывода капитала на пенсии и где их можно протестировать.

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

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

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

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

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

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

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

Какая тема Вас интересует больше?

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

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

olegvasil

Эксперт

Эксперт

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

Сообщений: 106

Добрый день.Нужно сделать методы по загрузке файло в на сервер статическими .Обычные методы работают нормально а статические требуют чтобы св-ва , которые они используют были статичнские
вот код формы
<?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

Сообщений: 106

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

Сообщений: 106

Проблема почему-то вот в этой строке $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

Сообщений: 106

Наверно потому что он является абстрактным сам класс но в его наследниках это поле переопределяется
Профиль
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. В чем фишка?
Профиль