Повторюсь что до этого писал на с++. Кроме главного вопроса касательно работы программы, хочу узнать возможно ли указать тип символьного массива при инициализации (как в си). Касаемо главного вопроса, пробовал отслеживать работу программы посимвольно - проходит весь фильтр до условия равно ли " правильно, последнее условие игнорирует. Думаю что это ошибки синтаксиса, прошу помочь с решением Код (PHP): <?php $id_images='<img align="left" vspace="5" hspace="10" src="http://kor.ill.in.ua/m/190x120/1680496.jpg">Корреспондент.net выделяет главные события вчерашнего дня. >'; $f=0; echo strlen($id_images) . '</br>'; for($i=0; $i<strlen($id_images); $i++) { if($id_images[$i]==="h") { echo "h - "; echo "$i" . '</br>'; if($id_images[$i+1]==="t") { echo "t - "; echo "$i" . '</br>'; if($id_images[$i+2]==="t") { echo "t - "; echo "$i" . '</br>'; if($id_images[$i+3]==="p") { echo "p - "; echo "$i" . '</br>'; for($img=$i; $img<strlen($id_images); $img++) { if($id_images[$i]!=="\"") { $link_image[$f] = (string) $id_images[$img]; $f++; } else { break; } } } } } } }
типы переменных https://secure.php.net/manual/ru/language.types.php а по коду не вижу вопроса, укажи строчку или что хочешь сделать пример Код (PHP): <pre> <?php $id_images='<img align="left" vspace="5" hspace="10" src="http://kor.ill.in.ua/m/190x120/1680496.jpg">'; $doc = new DOMDocument(); $doc->loadHTML($id_images); $dom = simplexml_import_dom($doc); var_export($dom); echo $dom->body->img['src']; print_r(parse_url($dom->body->img['src'])); если переходишь в web и из C++, то говори сразу задачу, PHP очень сильно заточен на работу с текстом, быстро умирает программа работать с html можно с помощью регулярных выражений, PHP DOMDocument и http://simplehtmldom.sourceforge.net/ (CSS селекторы прочитай)
Я писал на си и я хорошо знаю что такое типы данных, более того в си они указываются явно при инициализации; в данном случае регексп не нужен, объем данных не тот. я хочу вывести строку в которой будет чистый урл картинки без хтмл тегов. Код поправлял после выкладывания, в том числе и Код (PHP): if($id_images[$i]!=="\"") на Код (PHP): if($id_images[$i]!=="\"") но понту 0. Программа ужасно работает со счетчиками, возможо удел php на С++ этот алгоритм работает. Исходный массив символов заполнен только символами из фильтра "h,t,t,p", при попытке вывести >=4 элемента пустое место. При проверке is_string выдает false;
False_True я написал что есть как минимум 3 способа для работы с HTML. Дал пример как получить содержание src атрибута у тега img. Продублирую код, в том что выше, больше информации Код (PHP): <pre> <?php $id_images='<img align="left" vspace="5" hspace="10" src="http://kor.ill.in.ua/m/190x120/1680496.jpg">'; $doc = new DOMDocument(); $doc->loadHTML($id_images); $dom = simplexml_import_dom($doc); echo $dom->body->img['src']; ты пытаешься написать велосипед Добавлено спустя 1 минуту 59 секунд: Зачем тебе указывать определённый тип переменных? Добавлено спустя 1 минуту 30 секунд: https://secure.php.net/manual/ru/language.types.intro.php
не буду спорить скажу лишь что это удел по большой части, решения должен принимать программист а не компилятор, такая точка зрения выражена не только мной но и многими авторами популярных изданий, к примеру тот же Прата. спасибо, но не знаю как с ДОМ, но при парсинге в обычную строку выводит результат без разширения
в пхп всё иначе. он медленный, но имеет много встроенных скомпилированных функций. Поэтому привычные операции получаются очень быстрыми. Твоя задача в пхп решается через http://php.ru/manual/function.strpos.html и сводится к двум строкам кода. echo $i . '</br>';
Ну если не считать размер прототипа функции. Ну опять таки, это далеко не все решение, мы не знаем длины нужной строки, если найдем нужно будет делать присваивание в другой массив символов, что впринципе не короче моего алгоритма. Да там есть косяки в синтаксисе, но основная проблема задачи в том что цикл не останавливается как это требуется на символе ". Простите за придирчивость, просто хочу понимать логику. Хочу спросить является ли правильным сравнение? Код (PHP): if($id_images[$i]!=="\"")
Согласен, PHP и С# в плане отличий от С++ очень схожи, поскольку потребляют скомплированные функции, С++ же алгоритмический. Всем спасибо, за помощь и дискуссию, нашел солюшн; Сделал в 2х коротких циклах, первый-фильтр, второй читает до. Думаю данный алгоритм имеет право на жизнь особенно при обработке fulltext в XML Код (PHP): <?php $id_images='<img align="left" vspace="5" hspace="10" src="http://kor.ill.in.ua/m/190x120/1680496.jpg">'; echo strlen($id_images) . '</br>'; $c=0; for($i=0; $i<strlen($id_images); $i++) { if($id_images[$i]==="h") { if($id_images[$i+1]==="t") { if($id_images[$i+2]==="t") { if($id_images[$i+3]==="p") { $n_pos=$i; echo "$n_pos" . '</br>'; $i=strlen($id_images); } } } } } for($s=$n_pos; $s<strlen($id_images); $s++ ) { if($id_images[$s]=='"') { break; } else { $new_link[$c]=$id_images[$s]; echo $new_link[$c]; $c=$c+1; } }
Это как в C++ вставлять асемблерные вставки, чтобы не использовать готовый Windows API, вот что я думаю когда смотрю на этот код. PHP написан на C++ и т.д., считай PHP это как высокоуровневая обёртка и вместо того чтобы ты использовал бы методы и функции которая она предоставляет ты отказываешься от них и пишешь снова так как делал бы на C++ когда эти функции уже написаны до тебя на том же C++. Может проще было бы взять C++ и HTTP библиотеку на нём и не мучить PHP?
Вы знаете прототипы всех функций с которыми работаете? Для работы программы которую я пишу важен каждый байт памяти, поскольку нагрузка на сервер будет очень большая, потому я так придирчиво отношусь к каждой подпрограмме. Давайте возьмем алгоритмы сортировки, если без подхода врубить сорт разных видов при разных объемах данных скорость работы будет существенно отличаться. Если я знаю метод эффективнее - который найдет нужные эл. массива не дойдя до конца, то я не буду использовать обертку которая будет смотреть все элементы массива . По поводу ассемблера Вы не правы, знание ассемблера существенно повышает уровень программирования. Все не идеально, мир не идеален, я не идеален, обертки не идеальны.
Ой, нет. Ты не с того конца зашел тогда. Вон го и раст. А пхп каждый раз запускается, память не контролирует, ему плевать, он через 10-300 мс завершится. Его задача текст из БД брать и украшать. Не более того. Но на мой взгляд пхп весьма быстрый. Если работать с ним так оно задумано.
False_True если бы всегда нужна была бы скорость программы, то все бы до сих пор писали на ассемблере, тут все за разумную скорость, по этому и недопонимание, теперь я понимаю что кровь из носу тебе нужно получить скорость работы твоей программы на PHP, хотя этот язык не для этого, а для удобства.
А если на сервер идет поток данных по 10-15 тыс файлов в сутки (которые всячески обрабатываются) и помимо этого на сервере работает еще и сайт который терпит в сутки 10-50 тыс юзеров которые комментируют и регистрируются. Тот фрагмент что я решал это всего лишь одна сотая той программы которая должна работать. Производительность сервера стоит денег, при чем их нужно платить каждый месяц, программу можно написать один раз и с экономить расходы.
False_True, если вы пишете на php приложение, которое должно считать каждый байт, то вы делаете что-то не так и нужно сменить подход. 1. К пыху можно писать расширения прямо на сях, таким образом убрав внутрь все сложные алгоритмы и и предоставив приложению набор функций для работы с ними. Возможно вам как сишнику это будет проще ) 2. Приложение не обязательно должно быть чисто пыховским или чисто сишным ) Ни что не мешает вам реализовать отдельные задачи на других языках. К примеру я недавно задачу, которая требовала на пыхе нереального для сервера количества оперативки написал на golang + revel (советую глянуть, довольно занимательный язык), пых же просто стучиться к нему как к обычному веб-сервису и забирает нужные результаты. Идея проста: все что действительно требовательно к ресурсам (в реальности, а не потому что так кажется) переписать на более подходящие языки. Все остальное (клиентский интерфейс, операции с БД, несложные расчеты) доверить пыху, на нем, при использовании местных фреймворков это делается гораздо быстрее и проще.
False_True, вам же объясняют - интерпретатор php не самая быстрая вещь на свете, он не предназначен для сложных алгоритмов. И я не думаю, что при всей вашей аргументации ваш код будет работать быстрее, чем, к примеру, strpos, которая написана на C и скомпилирована. И писать на php сложнейший какой-нибудь алгоритм, и ожидать что он будет быстро работать - бессмысленно.
это всё размытые разговоры. Нужно оценивать по фактической конфигурации и нагрузке, которую создают люди. У меня вон форум без оптимизаций выдаёт 175 страниц в секунду. Такими темпами 50к просмотров можно протащить за пять минут. С обработкой файлов сложнее. Количество потоков пхп лучше держать по количеству ядер, соотв. если дюжина народу ливанёт файлы и пхп будет эти файлы жевать, то всё это залпинет.
Мы говорим о разных вещах - я говорю о нагрузке обработчиками, ты мне говоришь о стабильном трафике. Даже если взять трафик, то тут есть существенные отличия, трафик на форуме прогнозируем а на агрегаторе - нет и пиковая нагрузка может случится в любой момент. Обработка файлов далеко не весь функционал, есть еще рейтинг который берет инфу из вне и работает реал тайм.
я честно говоря вообще никаких нагрузок не вижу в том, что ты говоришь. Прости. Ладно. Не хочешь развивать тему - бон вояж.
Согласен что портит код, сделал отдельную функцию, включил через реквайр. Нагрузка не нагрузка, но мне в этом месте было удобнее написать свой алгоритм - я знаю как он работает и это главное если что то в программе пойдет не так. Если начну писать о том что грузит сайт это будет другая тема, не хочу офтопить. Могу создать новую и обсудить в ней, может будут дельные советы по оптимизации.