Задать вопрос
Ответы пользователя по тегу PHP
  • Существуют ли продвинутые php-курсы на русском языке?

    copist
    @copist
    Empower people to give
    1. Определи область интересов в программировании
    2. Поставь задачу или две в этой области
    3. Решай задачи
    4. Ищи решение лучше: на фреймворках, на шаблонах, на других языках
    5. Удали решение к чёрту, чтобы не мешало
    6. Повтори с пункта 3

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

    http://copist.ru/.../need-knowledge-self-study-tec...
    Ответ написан
    Комментировать
  • Почему неправильно срабатывает запись в БД MySQL PHP?

    copist
    @copist
    Empower people to give
    Не по теме, но

    mysql_query("UPDATE `rating_db`.`girls` SET `ROUNDS` = '$winRounds ' + 1, `RATING` = '$winNewRate' WHERE `girls`.`ID` = '$plus';");

    небезопасно

    используйте PDO и биндинги параметров
    Ответ написан
    2 комментария
  • RegExp доллар в скобках - корректно ли выражение?

    copist
    @copist
    Empower people to give
    Посмотри сервис https://www.debuggex.com/ там разбор регулярки показан наглядно

    take.ms/i1hL6

    С моей точки зрения бакс лишний или стоит не там
    Обычно после адреса идёт либо кавычка, либо двойная кавычка, либо пробельный символ, либо конец строки

    ~http[s]*://[^\s]+\.(jp[e]*g|png|gif)[\s\"\'$]~i
    Вот так выглядит разбор take.ms/73PMy
    Ответ написан
  • Может ли в highload проекте c архитектурой frontend + REST backend использоваться PHP на обеих сторонах?

    copist
    @copist Автор вопроса
    Empower people to give
    Для всех, кто подписан на вопрос - текущее решение: многослойное приложение https://icons8.com/

    Всё сложно.

    1. бакенд https://api.icons8.com/ на PHP Yii MySQL Memcached RabbitMQ Sphinx CouchBase. Занимается хранением и организацией информации об иконках и их файлах. Работает по HTTP RPC-style API - принимает и выдаёт данные в форматах JSON/XML
    2. фронтенд https://icons8.com/ на PHP Yii Memcached Gulp - занимается хранением JS, CSS, реализует авторизацию, личный кабинет и некоторые другие страницы, сборкой JS/CSS, выдаёт изображения для оформления страниц. Для личного кабинет работает с https://api.icons8.com/ через HTTP.
    3. фронтенд (Reach Client Application) https://icons8.com/web-app/ https://icons8.com/responsive-icons/ и другие страницы, на которых что-то "шевелится" :) на AngularJS SCSS Jade
    4. Приложения на ObjectveC для MacOC и С# для Windows https://icons8.com/app - реализуют то же, что https://icons8.com/web-app/ помощью CouchBase и https://api.icons8.com/
    5. внутренние приложения по обработке файлов иконок PHP Yii RabbitMQ и много утилит для работы с графическими и векторными файлами - обрабатывает файлы SVG, конвертирует в другие форматы - работает с https://api.icons8.com/ через HTTP и очереди RabbitMQ
    6. блог на PHP Wordpress icons8.com/blog который прозрачно стыкуется с icons8.com (описание habrahabr.ru/company/dataart/blog/236635/#comment_...
    7. генератор страниц в формате HTML из страниц на JS на NodeJS PhantomJS с помощью https://github.com/icons8/impresser - это для успешной индексации поисковыми роботами

    Любую часть системы можно размножить, но пока всё крутится на двух машинах: VDS для пунктов 1...6 и dedicated для пункта 7. Был ещё выделенный сервер Mac под пункт 5 чтобы выдавать иконки в формате PSD AI, но сломался слегка.

    Планируется, что фронт на JS станет также работать с https://api.icons8.com/ через WebSocket
    Ответ написан
    Комментировать
  • Генерация JSON с вложенными объектами

    copist
    @copist
    Empower people to give
    А вот так бы выглядело в ORM Propel (PHP)

    <?php
    $propelQuery = PostsQuery::create()
    	->joinWith('users') // join c включением джойненой таблицы в SELECT ...
    ;
    $propelCollection = $propelQuery->find();
    
    $result = array(); $index = 0;
    foreach($propelCollection as $post) {
    	$result[$index] = $post->toArray();
    	$result[$index]['user'] = $post->getUserss()->toArray();
    	$index++;
    }
    
    var_export($result);
    
    Ответ написан
    Комментировать
  • Генерация JSON с вложенными объектами

    copist
    @copist
    Empower people to give
    В дополнение к Fesor:

    Язык вы не указали, поэтому велосипед на PHP

    // описание таблиц
    $tableMap = array();
    
    // $postsFields и $usersFields - это описание таблиц - в каком точно порядке
    //   поля
    $tableMap['posts'] = array( // описание таблицы `posts`
    	'fields' => array('postid', 'title', 'post', 'date', 'userid'), // перечисление колонок
    	'primary' => 'postid', // primary ключ, для упрощения - несоставной
    	'relations' => array( // внешние ключи
    		'fk_userid' => array('userid', 'users', 'userid'), // ключ на таблицу `users` по полю `userid`
    	),
    );
    
    $tableMap['users'] = array( // описание таблицы `users`
    	'fields' => array('userid', 'username', 'usermail'), // перечисление колонок
    	'primary' => 'userid', // primary ключ, для упрощения - несоставной
    	'relations' => array( // внешние ключи
    	),
    );
    
    // $posts и $users - это два хранилища сущностей
    $posts = array();
    $users = array();
    
    // $resultSet = это имитация результата выборки по запросу
    // select
    //   p.postid, p.title, p.post, p.date, p.userid,
    //   u.userid, u.username, u.usermail
    // from posts p
    // join users u on p.userid = u.userid
    // -- все колонки в этом запросе обязаны следовать в том же порядке, что и в описании таблиц $postsFields и $usersFields
    
    $resulSet = array(
    	array(1,'post1_title','post1_content', '2013-10-16', 1, 1, 'login1', 'login1@domain'),
    	array(2,'post2_title','post2_content', '2013-10-16', 1, 1, 'login1', 'login1@domain'),
    	array(3,'post3_title','post3_content', '2013-10-16', 2, 2, 'login2', 'login2@domain'),
    	array(4,'post4_title','post4_content', '2013-10-16', 3, 3, 'login3', 'login3@domain'),
    	array(5,'post5_title','post5_content', '2013-10-16', 3, 3, 'login3', 'login3@domain'),
    	array(6,'post6_title','post6_content', '2013-10-16', 4, 4, 'login4', 'login4@domain'),
    );
    
    // теперь - перебор результатов выборки, составление сущностей с учётом повторения
    foreach($resulSet as $row) {
    	reset($row);
    
    	// выбор из строки результата всех значений, относящихся к `posts`
    	$post = array();
    	foreach($tableMap['posts']['fields'] as $key) {
    		$post[$key] = current($row);
    		next($row);
    	}
    	// сохранение сущности в хранилище, если ещё не было сохранено
    	$pk = $post[$tableMap['posts']['primary']];
    	if (!isset($posts[$pk])) {
    		$posts[$pk] = $post;
    	}
    
    	// выбор из строки результата всех значений, относящихся к `users`
    	$user = array();
    	foreach($tableMap['users']['fields'] as $key) {
    		$user[$key] = current($row);
    		next($row);
    	}
    	// сохранение сущности в хранилище, если ещё не было сохранено
    	$pk = $user[$tableMap['users']['primary']];
    	if (!isset($users[$pk])) {
    		$users[$pk] = $user;
    	}
    }
    
    // последнее - составление массива с нужной структурой
    $collection = array();
    $index = 0;
    foreach($posts as $post) {
    	$collection[$index] = $post;
    
    	// здесь надо воспользоваться $tableMap['posts']['relations']['fk_userid'], но мне лень
    	$fkUser = $post['userid'];
    	//echo '$fkUser=',$fkUser,PHP_EOL;
    	$collection[$index]['user'] = $users[$fkUser];
    
    	$index++;
    }
    
    var_export($collection);
    
    Ответ написан
    Комментировать
  • Как узнать текст выражения, на котором eval() закончился с фатальной ошибкой?

    copist
    @copist Автор вопроса
    Empower people to give
    Вот умные товарищи подсказали следующее:

    $evalResult = @eval('$result = (bool)(1<2);');
    
    $evalResult = null если выражение выполнилось
    $evalResult = false если не выполнилось
    


    Только почему-то на моей машине отрабатывает, а на промышленном стенде валится в Fatal Error и опять текст выражения остаётся неизвестным.

    У меня php 5.3.15, на проме 5.3.23
    Ответ написан
  • Сравнение строк

    copist
    @copist
    Empower people to give
    * Нечёткий поиск на клиенте и Soundex habrahabr.ru/post/125617/
    * Фонетический поиск habrahabr.ru/post/28752/ и его модификация: Soundex по-русски p2k.ru/archives/57
    * и ещё один htmlweb.ru/php/example/soundex.php (см середину статьи)
    Ответ написан
    1 комментарий
  • Способ организации обмена данными между 2мя системами

    copist
    @copist
    Empower people to give
    Ответ написан
    Комментировать
  • Как у вас реализовано чпу?

    copist
    @copist
    Empower people to give
    ЧПУ — это человеко-понимаемый УРЛ

    не
    h_ttp://example.com/post/121212

    а
    h_ttp://example.com/post/latest%20news

    Чтобы человек читал и понимал, что это за ссылка
    Ответ написан
    Комментировать
  • Оптимизация загрузки изображений по url

    copist
    @copist
    Empower people to give
    Ответ написан
    Комментировать