За последние 24 часа нас посетили 18757 программистов и 1706 роботов. Сейчас ищут 956 программистов ...

Превозмогания тред

Тема в разделе "PHP для новичков", создана пользователем ubunta2, 27 июн 2017.

  1. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    о боже, он дошел до классов :eek:
    ООП Берегись - Судный день близится
     
    [vs], Danil005 и Васяня нравится это.
  2. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    PHP:
    1. <?php ## "Ручная" реализация наследования.
    2.  // Вначале подключаем "базовый" класс.
    3.   require_once "File/Logger.php";
    4.   // Класс, добавляющий в FileLogger новую функциональность.
    5.   class FileLoggerDebug0
    6.   {
    7.     // Объект "базового" класса FileLogger.
    8.     private $logger;
    9.     // Конструктор нового класса. Создает объект FileLogger.
    10.     public function __construct($name, $fname)
    11.     {
    12.       $this->logger = new FileLogger($name, $fname);
    13.       // Здесь можно проинициализировать другие свойства текущего
    14.       // класса, если они будут.
    15.     }
    16.     // Добавляем новый метод.
    17.     public function debug($s, $level = 0)
    18.     {
    19.       $stack = debug_backtrace();
    20.       $file = basename($stack[$level]['file']);
    21.       $line = $stack[$level]['line'];
    22.       $this->logger->log("[at $file line $line] $s");
    23.     }
    24.     // Оставляем на месте старый метод log().
    25.     public function log($s) { return $this->logger->log($s); }
    26.     // И такие методы-посредники мы должны создать ДЛЯ КАЖДОГО
    27.     // метода из FileLogger.
    28.   }
    29. ?>
    Debug0.php
    PHP:
    1. <?php ## Базовый класс.
    2.  class FileLogger
    3.   {
    4.     public $f;          // открытый файл
    5.     public $name;       // имя журнала
    6.     public $lines = []; // накапливаемые строки
    7.     public $t;
    8.     public function __construct($name, $fname)
    9.     {
    10.       $this->name = $name;
    11.       $this->f = fopen($fname, "a+");
    12.     }
    13.     public function __destruct()
    14.     {
    15.       fputs($this->f, join("", $this->lines));
    16.       fclose($this->f);
    17.     }
    18.     public function log($str)
    19.     {
    20.       $prefix = "[".date("Y-m-d_h:i:s ")."{$this->name}] ";
    21.       $str = preg_replace('/^/m', $prefix, rtrim($str));
    22.       $this->lines[] = $str."\n";
    23.     }
    24.   }
    25. ?>
    Logger.php


    Warning: require_once(File/Logger.php): failed to open stream: No such file or directory in E:\OpenServer\domains\test\File\Logger\Debug0.php on line 3

    Fatal error: require_once(): Failed opening required 'File/Logger.php' (include_path='.;e:/openserver/modules/php/PHP-7.0-x64;e:/openserver/modules/php/PHP-7.0-x64/PEAR/pear') in E:\OpenServer\domains\test\File\Logger\Debug0.php on line 3
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    отформатируй диск E
     
  4. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Лучше C :D
     
  5. Sergey_Tsarev

    Sergey_Tsarev Активный пользователь

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Есть подозрение, что ошибка в 3-й строке файла Debug0.php. И ошибка эта в том, что указан неправильный путь для require_once.
     
  6. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    Warning: require_once(lib/uploadtext_class.php): failed to open stream: No such file or directory in E:\OpenServer\domains\test\1\index.php on line 2

    Fatal error: require_once(): Failed opening required 'lib/uploadtext_class.php' (include_path='.;e:/openserver/modules/php/PHP-7.0-x64;e:/openserver/modules/php/PHP-7.0-x64/PEAR/pear') in E:\OpenServer\domains\test\1\index.php on line 2


    index.php

    PHP:
    1. <?php
    2. require_once "lib/uploadtext_class.php";
    3. require_once "lib/uploadimage_class.php";
    4. if ($_POST["upload"]){
    5.     print_r($_FILES);
    6.     $upload_text = new Uploadtext();
    7.     $upload_image = new Uploadimage();
    8.     $sucsess_text = $upload_text->uploadFile($_FILES["text"]);
    9.     $sucsess_image = $upload_image->uploadFile($_FILES["image"]);
    10.  
    11.  
    12. }
    13. ?>
    14. <html>
    15. <head>
    16.     <title>Загрузка файлов</title>
    17. </head>
    18. <body>
    19.     <h1>Загрузка файлов</h1>
    20.     <?php
    21.     if ($_POST["upload"]){
    22.     if ($sucsess_text) echo "Текстовый файл успешно загружен";
    23.     else echo "Ошибка при загрузке текстового файла";
    24.     echo "<br />";
    25.     if ($sucsess_image) echo "Изображение успешно загружен";
    26.     else echo "Ошибка при загрузке изображения";
    27.     }
    28.     ?>
    29.     <form name="myform" action="index.php" method="post" enctype="multipart/form-data">
    30.         <table>
    31.         <tr>
    32.         <td>Изображение</td>
    33.         <td>
    34.         <input type="file" name="image"/>
    35.         </td>
    36.         </tr>
    37.         <tr>
    38.         <td>Текст</td>
    39.         <td>
    40.         <input type="file" name="text"/>
    41.         </td>
    42.         </tr>
    43.         <tr>
    44.         <td colspan="2">
    45.             <input type="submit" name="upload" value="Загрузить файл" />
    46.        
    47.         </tr>
    48.         </table>
    49.     </form>
    50.     </body>
    upload_clas.php

    PHP:
    1. <?php
    2.  
    3.         abstract class Upload{
    4.    
    5.         protected $dir;
    6.         protected $mime_types;
    7.        
    8.         public function uploadFile($file){
    9.             if(!$this->isSecurity($file)) return false;
    10.             $uploadFile = $this->dir."/".$file["name"];
    11.             return move_uploaded_file($file["tmp_name"], $uploadFile);
    12.         }
    13.     public function isSecurity($file){
    14.         $blacklist = array (".php", ".phtml", ".php3", ".php4", ".html", ".htm");
    15.         foreach ($blacklist as $item){
    16.             if (preg_match("/$item\S/i", $file["name"])) return false;
    17.         }
    18.         $type = $file["type"];
    19.         for ($i = 0; $i< count($this->mime_type); $i++){
    20.             if ($type == $this->mime_type($i)) break;
    21.             if ($i + 1 == count($this->mime_type($i)) return false;
    22.  
    23.         }
    24.         $size = $file["size"];
    25.         if ($size > 2048000) return false;
    26.         return true;
    27.     }
    28.         }
    29. ?>
    uploadimage_clas.php

    PHP:
    1. <?php
    2.     require_once "upload_class.php";
    3.    
    4.     class UploadImage extends Upload {
    5.        
    6.         protected $dir = "images";
    7.         protected $mime_types = array("image/png", "image/jpeg", "image/gif");
    8.     }
    9.    
    10. ?>

    uploadtext_clas .php

    PHP:
    1. <?php
    2.     require_once "upload_class.php";
    3.    
    4.     class UploadText extends Upload {
    5.        
    6.         protected $dir = "text";
    7.         protected $mime_types = array("text/plain");
    8.     }
    9.    
    10. ?>

     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    что ошибка гласит? что делаешь и какого результата ожидаешь?
     
    ubunta2 нравится это.
  8. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    Предупреждение: require_once (lib / uploadtext_class.php): не удалось открыть поток: нет такого файла или каталога в E: \ OpenServer \ domains \ test \ 1 \ index.php в строке 2

    Неустранимая ошибка: require_once (): Ошибка открытия требуется lib / uploadtext_class.php (include_path = '; e: /openserver/modules/php/PHP-7.0-x64; e: /openserver/modules/php/PHP-7.0 -x64 / PEAR / pear ') в E: \ OpenServer \ domains \ test \ 1 \ index.php в строке 2
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Так. Переводчиком умеешь пользоваться, буквы видишь. А значение написанного понимаешь?
     
    ubunta2 нравится это.
  10. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    в названии файла был пробел . Исправил, но ошибка не исчезла.
    --- Добавлено ---
    Warning: require_once(upload_class.php): failed to open stream: No such file or directory in E:\OpenServer\domains\test\1\lib\uploadtext_class.php on line 2

    Fatal error: require_once(): Failed opening required 'upload_class.php' (include_path='.;e:/openserver/modules/php/PHP-7.0-x64;e:/openserver/modules/php/PHP-7.0-x64/PEAR/pear') in E:\OpenServer\domains\test\1\lib\uploadtext_class.php on line 2
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    нужный файл там лежит?
     
    ubunta2 нравится это.
  12. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    поисправлял и дошел до
    Array ( [image] => Array ( [name] => image.jpg [type] => image/jpeg [tmp_name] => E:\OpenServer\userdata\temp\php5F61.tmp [error] => 0 [size] => 50451 ) [text] => Array ( [name] => text.txt [type] => text/plain [tmp_name] => E:\OpenServer\userdata\temp\php5F62.tmp [error] => 0 [size] => 15 ) )
    Fatal error: Uncaught Error: Class 'Uploadimage' not found in E:\OpenServer\domains\test\1\index.php:7 Stack trace: #0 {main} thrown in E:\OpenServer\domains\test\1\index.php on line 7
     
  13. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Так. А это в свою очередь что значит?
     
    ubunta2 нравится это.
  14. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    Fatal error: Uncaught Error: Class 'UploadImage' not found in E:\OpenServer\domains\test\1\index.php:6 Stack trace: #0 {main} thrown in E:\OpenServer\domains\test\1\index.php on line 6
    теперь так
    UploadImage класс не находит
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Так. А класс такой определен к моменту использования?
     
    ubunta2 нравится это.
  16. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    не знаю
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    А должен знать. Ты же код пишешь. Должен 1) понимать что написано, 2) уметь получить актуальную информацию и 3) сравнить её с теми данными, которые у тебя в голове. Это отладкой называется.
     
    mkramer, ubunta2 и denis01 нравится это.
  18. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    все исправил . Получилось.
    --- Добавлено ---
    вот только загрузка фалов в папки не произошла
     
  19. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Может потому что не существует каталога в который ты грузишь?
     
    ubunta2 нравится это.
  20. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    есть text и images
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    где они "есть" и как ты убеждаешься что именно в них должны попадать данные?
     
  22. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    это созданные 2 папки с именами text и images
    --- Добавлено ---
    protected $dir = "text";
    в директорию text
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    И еще раз про отладку. У тебя где-то на просторах твоего диска созданы папки и у этих папок даже есть полный путь. В твоем коде используются какие-то символы которые типа идентифицируют путь. В процессе выполнения этой каши пхп-машина получает какой-то итоговый путь к которому и пытается обратиться. Твоя ОБЯЗАННОСТЬ знать какой путь попытается использовать пхп-машина и уметь проверить и исправить. От того что ты написал две строчки кода и создал два каталога - еще не случилось что пхп-машина будет поклаживать файлики туды.
     
    denis01 и mkramer нравится это.
  24. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    protected $dir = "images";

    text и images должно загрузится, но не грузится
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Может быть тебе и должно грузиться, но у компьютера другое мнение. Не грузится. Отлаживай. Как ты это делаешь?