Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > План изучения основ


Автор: systemIV 2.5.2011, 19:32
Брат помог набросать примерный план изучения, сечас ему стараюсь следовать. Задался целью с начала научиться писать граберы и парсеры. Вот мой план, может кому есть что добавить?

1. Основы языка
2. Основные функции
3. Работа со строками
4. Работа с файлами
5. Регулярные выражения
6. cURL

В общем принципе я всё изучил, щас хочу приступить к практике, но понимаю, что чего то не хватает.

Автор: gta4kv 2.5.2011, 20:19
Бред... Берете цель, начинаете её выполнять.. Изучение начинается с практики, а заумные книжки читать можно потом...

Автор: systemIV 2.5.2011, 20:54
Я считаю что ты не прав.
Следую такому принципу в свет выходит "###код" и "быдлокодеры".

Автор: bars80080 2.5.2011, 23:12
Цитата(systemIV @  2.5.2011,  20:54 Найти цитируемый пост)
Следую такому принципу в свет выходит "###код" и "быдлокодеры".

проблема любой работы заключается в том, что теоретик по определению будет вначале создавать ###код. и это относится не только к программированию.
без практики бессмысленно любое изучение. хотя и теорию я бы отвергать не стал. имхо, достаточно прочитать одну рекомендованную книгу - для вхождения в курс дела, а затем начать чистую практику, попутно интересуясь, насколько верна придуманная реализация.

Автор: systemIV 2.5.2011, 23:18
Я сейчас начал читать книгу: PHP5 Профессиональное программирование (Э. Гутсман, С. Баккен, Д. Ретанс.) А так, я могу написать простенький двиг для сайта или блога, смотрел видеокурс Попова.

Автор: bars80080 2.5.2011, 23:24
Цитата(systemIV @  2.5.2011,  23:18 Найти цитируемый пост)
смотрел видеокурс Попова

 smile 
готовься к побиванию камнями

Автор: gta4kv 2.5.2011, 23:28
ну, настоящий книгой для начинающих я всё таки считаю PHP5 в подлиннике от Котерова...

Добавлено через 44 секунды
сам по ней учился, но это было лет 5 назад - так что может и устарело. да врядли.

Добавлено через 1 минуту и 39 секунд
Цитата(systemIV @ 2.5.2011,  20:54)
Я считаю что ты не прав.
Следую такому принципу в свет выходит "###код" и "быдлокодеры".

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

Автор: systemIV 2.5.2011, 23:42
Цитата(systemIV @  2.5.2011,  23:18 Найти цитируемый пост)
смотрел видеокурс Попова

 smile 
готовься к побиванию камнями[/QUOTE]
Да ладно)) В принципе если не брать в счёт что он про переменные рассказывает по 15-20 минут и каждую тему мусолит, то мне кажется можно для себя почерпнуть некоторые приёмы работы со страничкой)

Я решил последовать Вашему совету и вот уже с пол часа парюсь над грабером) 
Грабить он должен заголовки с одной биржи:

Код

<?php
    if($curl = curl_init()){
        curl_setopt($curl, CURLOPT_URL, 'http://www.weblancer.net/projects/');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $out = curl_exec($curl);
        preg_match_all('/<a href="\/projects\/.*?" class="item">(.*?)<\/a>/', $out, $matchs);
        echo count ($matchs);
        curl_close($curl);
    }
?>


Пробовал и через цикл и просто по индексу вывод. Не работает. Выводит "ArrayArray". И длинна массива выходит всего 2. Хотя через сервис проверял, регулярное выражение составил верно...

Автор: bars80080 3.5.2011, 12:35
поставьте вместо echo count ($matchs);

Код

var_dump($matchs);


посмотрите, что там у вас в данных

Автор: systemIV 3.5.2011, 14:38
Ага. Спасиб, разобрался.
Выводит всё норм, только вопрос, как мне теперь этот массив форматировать?
Например я считал что этот код должен работать:
Код

<?php
    if($curl = curl_init()){
        curl_setopt($curl, CURLOPT_URL, 'http://www.weblancer.net/projects/');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $out = curl_exec($curl);
        preg_match_all('/<a href="\/projects\/.*?" class="item">(.*?)\<\/a>/', $out, $matchs);
        echo "<table style='border=2px solid #000'><tr>";
        for($i = 0; $i < count($matchs); $i++){
            echo "<td>" . $matchs[$i] . "</td>";
        }
        echo "</tr></table>";
        curl_close($curl);
        
    }
?>


А он почему то не заводится

Автор: patap 3.5.2011, 15:00
вы внимательно смотрели что выводит 
Код

var_dump($matchs);


навскидку http://ua.php.net/preg_match_all , разберись что попадает в matches. Хотя и достаточно будет посмотреть на var_dump($matchs) чтобы все понять

Автор: systemIV 3.5.2011, 15:14
Всё я разобрался уже. Просто сюда забыл отписать.
Вот какой скрипт получился.
Код

<?php
    if($curl = curl_init()){
        curl_setopt($curl, CURLOPT_URL, 'http://www.weblancer.net/projects/');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $out = curl_exec($curl);
        preg_match_all('/<a href="\/projects\/.*?" class="item">(.*?)\<\/a>/', $out, $mat);
        $fo = fopen("info.txt", "w+");
        for($i = 0; $i < count($mat[1]); $i++){
            fwrite($fo, $mat[1][$i] . "\n");
        }
        fclose($fo);
        curl_close($curl);
        
    }
?>

Автор: systemIV 3.5.2011, 22:48
Простите за мою назойливость, кто то крикнет что гугл в помощь, но я там так и не нашёл адекватного ответа.
К примеру есть каталог сотовых телефонов. Я уже составил верное рег выражение, но не знаю как мне сграбить изображения так, что бы они сохранялись к примеру в папке Images. Ткнити в сторону каких функций копать?

Автор: gta4kv 3.5.2011, 23:06
file_get_contents
file_put_contents

Автор: MoLeX 4.5.2011, 05:18
Цитата(systemIV @  2.5.2011,  23:18 Найти цитируемый пост)
А так, я могу написать простенький двиг для сайта или блога, смотрел видеокурс Попова. 

мда.  smile 
Срочно форматируй жесткий диск  smile

Добавлено через 44 секунды
P.S. это случайно не тот попов, который якобы "создал новую операционную систему"?

Автор: systemIV 4.5.2011, 09:08
Цитата(MoLeX @  4.5.2011,  05:18 Найти цитируемый пост)
P.S. это случайно не тот попов, который якобы "создал новую операционную систему"? 

Хз про что ты, но после него я хотя бы могу спокойно читать книги и статьи, без напряга что я какое то слово вообще не знаю=)

Автор: MoLeX 4.5.2011, 09:25
http://lurkmore.ru/%D0%94%D0%B5%D0%BD%D0%B8%D1%81_%D0%9F%D0%BE%D0%BF%D0%BE%D0%B2

Автор: systemIV 4.5.2011, 09:28
Нее, вот, если тебя интересует его личность можешь в раздел "Об Авторе" зайти=)
http://ruseller.com/

Автор: gta4kv 4.5.2011, 11:12
Цитата(MoLeX @ 4.5.2011,  09:25)
http://lurkmore.ru/%D0%94%D0%B5%D0%BD%D0%B8%D1%81_%D0%9F%D0%BE%D0%BF%D0%BE%D0%B2

ой спасибо, с утреца такой заряд =D

Автор: MoLeX 4.5.2011, 11:20
gta4kv,  smile 

Автор: systemIV 4.5.2011, 14:39
А вот ещё такой вопрос, какой правильный алгоритм ресайза изображений? Везде описывают скрипты по 40 строк, а так что бы для примера, строк на 10 нету?

Автор: MoLeX 4.5.2011, 14:45
Цитата(systemIV @  4.5.2011,  14:39 Найти цитируемый пост)
какой правильный алгоритм ресайза изображений? Везде описывают скрипты по 40 строк, а так что бы для примера, строк на 10 нету? 

который на 50 строк.

Автор: systemIV 4.5.2011, 14:46
Мне бы сам алгоритм понять, пусть даже он будет написан не на PHP)

Автор: ksnk 4.5.2011, 14:58
Цитата(systemIV @  4.5.2011,  14:46 Найти цитируемый пост)
Мне бы сам алгоритм понять, пусть даже он будет написан не на PHP) 

http://ru2.php.net/manual/en/function.imagecopyresized.php, если из него выкинуть комментарии - будет как раз на 10 строк. не оно?  smile 

Автор: systemIV 4.5.2011, 15:02
Цитата(ksnk @  4.5.2011,  14:58 Найти цитируемый пост)
Первый example, если из него выкинуть комментарии - будет как раз на 10 строк. не оно?   

Тютельку в тютельку=) Ушёл курить доки=))

Автор: Sentox 4.5.2011, 23:56
Прикол и здесь Попова бьют, надо бы уже конечно ему обратится к ....
Да ладно, в принципе у меня совет иного характера, вместо Попова выучил бы работу с переменными процессора и оперативной памяти, там гляди все шарики стали бы в свою место. Потом саму безопасность при написании .... smile 

Автор: systemIV 4.5.2011, 23:58
а зачем мне в web-программировании c процом работать? Это же не системное программирование. 
Ток потом понял про что ты=) Не, я лучше с малого, как все, не хватает конечно наставника, который бы например поручал бы мне часть своей работы, а я делал бы её бесплатно. Взамен бесценный опыт=)
Если кого то интересует, то прошу, всегда к вашим услугам, парсеры уже писать умею, простенькие, с БД могу работать немного. Остаётся только что бы шли задачи, и опыт будет как снежный ком=)
Я щас про ООП читаю=)

Автор: Sentox 5.5.2011, 00:00
Знание как формируются переменные, функции , а потом классы с объектами в ОП откроет не только к PHP ...

Автор: systemIV 5.5.2011, 11:59
Я буду лучше читать, и одновременно задачи выполнять, щас понять основы, а потом вглубь идти, а сейчас думаю не зачем голову забивать там итак щас каша из html, css, jQuery, JS и PHP.

Вот по вот этой задачке думаю http://www.softtime.ru/info/task.php?id_article=73

Я её решил вот так: 
index.php
Код

<?php
    if(!@file("date.txt")){
        date_default_timezone_set('Europe/Moscow');
        $year = date("Y");
        $mounth = date("m");
        $day = date("d");
        $hour = date("H");
        $minute = date("i");
    }else{
        $fo = fopen("date.txt", "r");
        preg_match_all('/(\d{2}).(\d{2}).(\d{4}) \/ (\d{2}):(\d{2})/', fgets($fo), $result);
        $year = $result[3][0];
        $mounth = $result[2][0];
        $day = $result[1][0];
        $hour = $result[4][0];
        $minute = $result[5][0];
    }
?>
<html>
    <body>
        <form action="action.php" method="post">
            <p>Год</p>
            <input type="text" name="year" value="<?php echo $year; ?>" />
            <p>Месяц</p>
            <input type="text" name="mounth" value="<?php echo $mounth; ?>" />
            <p>День</p>
            <input type="text" name="day" value="<?php echo $day; ?>" />
            <p>Час</p>
            <input type="text" name="hour" value="<?php echo $hour; ?>" />
            <p>Минута</p>
            <input type="text" name="minute" value="<?php echo $minute; ?>" />
            <br />
            <input type="submit" name="okey" />
        </form>
    </body>
</html>


action.php
Код

<?php
    $year = $_POST["year"];
    $mounth = $_POST["mounth"];
    $day = $_POST["day"];
    $hour = $_POST["hour"];
    $minute = $_POST["minute"];
    $fo = fopen("date.txt", "w");
    fwrite($fo, "$day.$mounth.$year / $hour:$minute");
    fclose($fo);
    header("Location: index.php");
?>


Но мне кажется проверка на существование файла странная, потому что если убрать "заглушку ошибок" при чтении файла они полезут.

Автор: MoLeX 5.5.2011, 12:23
file_exists()

Добавлено через 1 минуту и 11 секунд
а теперь упрости это дело, а html приведи к стандарту

Автор: systemIV 5.5.2011, 13:20
MoLeX, я её уже до этого пробовал) Не заводится, файл может существовать, а внём пусто, вот её минус. А html у меня есть шаблоны готовые, просто тут для опыта пишу его за 3 сек, основные тэги.

Вот следующая задача, это подбор md5. Я запарился=)

Вот мои наброски, тут скорее всего всё непрально
Код

$pass = "ee11cbb19052e40b07aac0ca060c23ee";
$dic = "abcdefghijklmnopqrstuvwxyz";
$count_dic = count($dic);
for($i = 0; $i <= $count_dic; $i++){
    if($i == $count_dic){
            
        if(md5($i) == $pass){
                echo $i;
        }
    }
}

Основная мысль примерно ясна, сначала запускаем цикл, там проверяем, если количество переборов = 26, то надо как то сбросить все символы в $i на букву на первый символ строки и добавить ещё один символ. А во втором условии мы сравниваем полученый результат с паролем. Может я всё не так представляю?

Автор: bars80080 5.5.2011, 13:40
во-первых, не понятен смысл задачи. какая цель ставилась?
во-вторых, подбор пароля - противозаконное действие, и вашу тему могут благополучно прикрыть

в-третьих, смысл в данном коде первого цикла? почему сразу не написать:

Код

        if(md5(count($dic)) == $pass){
                echo $i;
        }

Автор: systemIV 5.5.2011, 13:42
Это обычная задача на теорию http://www.softtime.ru/info/task.php?id_article=74

Автор: bars80080 5.5.2011, 14:08
Цитата(systemIV @  5.5.2011,  13:42 Найти цитируемый пост)
Это обычная задача на теорию

обычных задач не бывает. есть реальные, а есть "от балды". самое плохое в последних задачах - это когда из-за отсутствия смысла, фактически невозможно реализовать и тем более получить нужные знания.

что-то не увидел на представленной странице тезиса, что md5 - невозможно расшифровать. можно только случайно получить ключ, имеющий ту же hash-последовательность при пропускании через алгоритм md5

Автор: systemIV 5.5.2011, 21:31
bars80080, прости не понял что ты сказал. Какой то бессвязный набор предложений. 
У меня щас стоит вопрос, как при прохождении по всему массиву в переменной $i сделать count() не 1, а 2. то есть прибавить ещё символ, щас буду думать как это сделать конкатенацией, может получится.  

Автор: bars80080 5.5.2011, 23:39
Цитата(systemIV @  5.5.2011,  21:31 Найти цитируемый пост)
как при прохождении по всему массиву в переменной $i сделать count() не 1, а 2

в переменной $i нет count(), это ж функция. о чём речь?

Автор: systemIV 5.5.2011, 23:41
Я походу туплю, сори, щас просто голова другим забита. Завтра разберусь с этой задачкой думаю

Автор: systemIV 6.5.2011, 12:03
Всё! Написал=)
Вот код скрипта, который подбирает слова и сравнивает их с md5 хэшом=)
Код

<?php
    $md5 = "ee11cbb19052e40b07aac0ca060c23ee";
    for($i = 0; $d != "zzzz", $d = "a; $i++){
        $d++;
        if(md5($d) == $md5){
            echo $d;
        }
    }
?>

Всего пару строк)
А парился пару суток.
Щас вот изучил основы ООП в теории, как лучше потренироваться? Хотелось бы закрепить свои знания)
Может кто что посоветует?

Автор: нуп 6.5.2011, 13:37
Это сарказм?
Код

 for($i = 0; $d != "zzzz", $d = "a; $i++){

Автор: s0lman 6.5.2011, 15:05
и шо, не вывалило ошибку?  smile 

Автор: systemIV 6.5.2011, 23:03
Нет не выводит, а что должно?
Аааа, блин, переменную не там объявил)) эт я потом отредактировал, она была отдельно до цикла выведена, просто тут не сюда скопировал, в коде всё норм) сори.
Как насчёт предложений по изучению ООП?

Автор: нуп 7.5.2011, 09:44
Та не )) все впорядке  smile 

Автор: systemIV 8.5.2011, 10:18
Доброго времени суток=)

Опять прабла, и никак не могу её найти, решил написать обёртку для парсера, заодно и потренероваться в ООП.
Но что совсем обычно, выдаёт ошибку(
Код

<?php
class Parce{
    function __construct(){
        private $curlInit = curl_init();
        private $hostName = "";
        private $regV = "";
    }

    public function putHost($hostName){
        $this -> hostName = $hostName;
    }
    
    public function putRegV($regV){
        $this -> regV = $regV;
    }
    
    public function getResult(){
        var_dump($indexMas);
    }
    curl_setopt($curlInit, CURLOPT_URL, $hostName);
    curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);
    private $outInfo = curl_exec($cutlInit);
    
    preg_match_all($regV, $outInfo, $indexMas);
}
$newParce = new Parce();
$newParce -> putHost("www.example.com");
$newParce -> putRegV('/.*?/');
$newParce -> getResult();
?>

Автор: bars80080 8.5.2011, 13:34
Цитата(systemIV @  8.5.2011,  10:18 Найти цитируемый пост)
    curl_setopt($curlInit, CURLOPT_URL, $hostName);
    curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);
    private $outInfo = curl_exec($cutlInit);
    
    preg_match_all($regV, $outInfo, $indexMas);

а почему эти функции не находятся в теле какого-нибудь метода? 

Автор: systemIV 8.5.2011, 15:06
Ага вижу) Позор мне) Это именно те вещи которые познаются на практике))
Вот рабочий код)
Код

<?php
class EasyParce{
    private $curlInit;
    private $hostName;
    private $regV;
    private $outSite;
    private $indexMas;

    function __construct(){
        $this->curlInit = curl_init();
    }
        

    function putHost($hostName){
        $this->hostName = $hostName;
    }
    
    function putRegV($regV){
        $this->regV = $regV;
    }
    
    function exec(){
        curl_setopt($this->curlInit, CURLOPT_URL, $this->hostName);
        curl_setopt($this->curlInit, CURLOPT_RETURNTRANSFER, true);
        $this->outSite = curl_exec($this->curlInit);
        preg_match_all($this->regV, $this->outSite, $this->indexMas);
        curl_close($this->curlInit);
    }
    
    function getResult(){
        $this->exec();
        var_dump($this->indexMas);
    }
}

$newParce = new EasyParce();
$newParce -> putHost("http://www.weblancer.net/projects/");
$newParce -> putRegV('/<a href="\/projects\/.*?" class="item">(.*?)\<\/a>/');
$newParce -> getResult();
?>

Автор: WallTearer 8.5.2011, 20:24
Если вопрос ещё актуален, и автор действительно хочет научиться программировать на PHP на серьёзном уровне, а не создавать домашние сайты и сборки на друпале или джумле, то я бы очень рекомендовал для начала ознакомиться с настоящими основами. Почитать книги по С и С++, вот, например, следующие книги прочитал я и некоторые мои друзья и очень довольны: http://www.ozon.ru/context/detail/id/4369459/ и http://www.ozon.ru/context/detail/id/2527043/. Это даст приблизительно понять, что такое программирование, зачем нужно ООП, и уловить базовый инструментарий при разработке программ. При этом когда читаешь книгу, нужно обязательно выполнять задания в конце глав. Ибо теория без практики мертва, а практика без теории - слепа.
А дальше уже можно взяться за изучение ПХП, например с этой, очень хорошей книги - http://www.ozon.ru/context/detail/id/5264620/, и продолжить изучение, например, вот с этой - http://www.ozon.ru/context/detail/id/2847621/.
Короче говоря, для качественного изучения необходимо время, быстро получается только у кроликов.
А всякие статьи в интернете и видеоролики, они лишь показывают как решить конкретную проблему, как нафигачить какой-то скрипт, но они не научат программировать и не способствуют развитию алгоритмического мышления.
Где-то так. 
Успехов smile 

Автор: systemIV 8.5.2011, 20:35
Цитата(WallTearer @ 8.5.2011,  20:24)
Если вопрос ещё актуален, и автор действительно хочет научиться программировать на PHP на серьёзном уровне, а не создавать домашние сайты и сборки на друпале или джумле, то я бы очень рекомендовал для начала ознакомиться с настоящими основами. Почитать книги по С и С++, вот, например, следующие книги прочитал я и некоторые мои друзья и очень довольны: http://www.ozon.ru/context/detail/id/4369459/ и http://www.ozon.ru/context/detail/id/2527043/. Это даст приблизительно понять, что такое программирование, зачем нужно ООП, и уловить базовый инструментарий при разработке программ. При этом когда читаешь книгу, нужно обязательно выполнять задания в конце глав. Ибо теория без практики мертва, а практика без теории - слепа.
А дальше уже можно взяться за изучение ПХП, например с этой, очень хорошей книги - http://www.ozon.ru/context/detail/id/5264620/, и продолжить изучение, например, вот с этой - http://www.ozon.ru/context/detail/id/2847621/.
Короче говоря, для качественного изучения необходимо время, быстро получается только у кроликов.
А всякие статьи в интернете и видеоролики, они лишь показывают как решить конкретную проблему, как нафигачить какой-то скрипт, но они не научат программировать и не способствуют развитию алгоритмического мышления.
Где-то так. 
Успехов smile

Почему то мне показалось что пост содержит слишком много ссылок на интернет-магазин))
Но да ладно не в этом суть. Задачи я решаю с интернет статей, где ничего не объяснятся, приходится гуглить и спрашивать знающих людей(благо они ещё есть, не перевелись добрые люди))
Я изучал языки: Assambler, Basic, C, C++, JavaScript, его библиотеку jQuery, для полного списка добавлю что ещё делаю на заказ вёрстку=)) А php расширяет мои возможности, и с каждым днём он мне нравится всё больше и больше своей лаконичностью. Если убрать из всего PHP сообщества программистов быдлокодеров, который от балды пишут, и им пох на всё и всех кроме себя, лишь бы впарить заказчику, тогда мне кажется WEB индустрия не искала бы новые языки для реализации интерфейсов пользователя, типа Perl, Ruby. А всё внимание сконцентрировала бы на PHP.  Хотя меня за эти слова наверное сейчас закидают камнями) Т.к разнообразие должно быть всегда.
Что касается аритмического мышления, то у меня 2 разряд по шахматам) Правда сейчас я врятли сыграю хорошую партию)
Спасибо за дельные советы

Автор: WallTearer 8.5.2011, 20:53
Цитата(systemIV @ 8.5.2011,  20:35)
Почему то мне показалось что пост содержит слишком много ссылок на интернет-магазин))

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

Автор: systemIV 8.5.2011, 20:56
Я вот эту читаю=)
http://www.ozon.ru/context/detail/id/2612430/

Автор: systemIV 10.5.2011, 20:50
Создал свою первую CMS. Естественно там всё криво нет MVC архитектуры, не на ООП и вообще кучка косячков. Но хочется сделать её лучше чем она сейчас. Т.к у меня явные проблемы с русским языком, хочу добавить проверку орфографии. Есть какой ни будь модуль? JavaScript или PHP не имеет значения. Но хотелось бы что то типа как CKEdite. Просто подключить и всё.

Автор: systemIV 15.5.2011, 13:55
А где можно почитать про фримворк Kohana? Везде пишут о установке, о локальном сервере и т.д. хотелось бы экспресс курс по ООП и MVC в этом фримворке

Автор: gta4kv 15.5.2011, 20:11
http://kerkness.ca/wiki/doku.php

Автор: systemIV 4.6.2011, 13:59
Хочу сваргань сайтик. Что то наподобии домашней странички с блогом. Тематика есть, но нет необходимых знаний=)
Хочу собрать сайт как по кирпичикам, но сначала их нужно заготовить. К примеру обёртка для БД у меня есть, шаблонизатор - есть. Всё естественно на ООП. Какие ещё кирпичики мне будут нужны?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)