• Как разбить текст по BB тегу и переносу строки одновременно?

    Oldshelf
    @Oldshelf
    Неидеально, но кажется работает:

    $text='Какой-то текст [IMG=3902565d3789b88c50b.jpg] Текст после картинки без переноса[IMG=3902565d3789b88c50b.jpg][IMG=3902565d3789b88c50b.jpg]
    
    Текст после изображения с переносом
    
    Обычный абзац
    
    Текст перед картинкой вконце всего текста [IMG=3902565d3789b88c50b.jpg].';
    
    $split="SPLIT";
    
    $text=preg_replace ("#(.*)(\[IMG\=.+\])(.*)#Uisu", $split."$1".$split."$2".$split."$3", $text);
    
    $t_arr=explode ($split, $text);
    foreach ($t_arr as $k=>$v)
     if ($v!="") $arr []=trim ($v);
    
    print_r ($arr);


    Array
    (
        [0] => Какой-то текст
        [1] => [IMG=3902565d3789b88c50b.jpg]
        [2] => Текст после картинки без переноса
        [3] => [IMG=3902565d3789b88c50b.jpg]
        [4] => [IMG=3902565d3789b88c50b.jpg]
        [5] => Текст после изображения с переносом
    
    Обычный абзац
    
    Текст перед картинкой вконце всего текста
        [6] => [IMG=3902565d3789b88c50b.jpg]
        [7] => .
    )
    Ответ написан
    1 комментарий
  • Почему: Cannot modify header information?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Потому что сообщения об ошибках надо читать.
    Читать надо сообщения об ошибках.
    И только потом бежать что-то делать.

    output started at /home/s/sofuwa/beta.sofuwa.ru/public_html/wp-includes/functions.php:4231

    Никаким BOM в таком месте даже и не пахнет.
    Вместо "массовых преобразований" надо открыть конкретный файл, на конкретной строке, и смотреть что там вылезает

    phpfaq.ru/newbie/headers
    Ответ написан
    2 комментария
  • Как максимально обезопасить сайт на html(включая защиту от wget скачивания)?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Не выкладывать его в Интернет.
    Ответ написан
    Комментировать
  • Зачем долбить главную страницу?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Научитесь защищать сайт не плагинами, а правильной настройкой среды окружения (триггеры на сетевую активность).
    (и таких вопросов вообще больше не будет у Вас)
    Ответ написан
    2 комментария
  • Как из callback функции вернуть данные?

    DevMan
    @DevMan
    заведите переменную снаружи и прокиньте ее в колбэк через юз.
    https://ideone.com/5NxwXT
    Ответ написан
    1 комментарий
  • Как отправлять сообщения в вк с помощью php?

    @MrFeaf
    PHP-developer
    В этой статье (и в документации в целом) есть ответ на Ваш вопрос: https://vk.com/dev/messages.send
    Ответ написан
    Комментировать
  • Является ли хорошим решением вывод результата из контролера напрямую в шаблоне blade?

    А че не подходит вариант через сервис-провайдер? Я в таких случаях просто пишу в AppServiceProvider
    view()->composer(['header', 'footer'],  function($view){
                $view->with('menus', Menu::all());
            });

    и все прекрасно работает
    Ответ написан
    3 комментария
  • Yii2: Почему не работает авторизация на продакшене, хотя на локальной версии с той же БД все ок?

    @ChernovGV Автор вопроса
    Все дело было в конфигах:
    'cookieDomain' => 'back.some.domain',
    Ответ написан
    Комментировать
  • Yii2: Почему не работает авторизация на продакшене, хотя на локальной версии с той же БД все ок?

    VladimirAndreev
    @VladimirAndreev
    php web dev
    где там продакшн сессии должен хранить - он туда вообще писать может?
    Ответ написан
    Комментировать
  • Является ли хорошим решением вывод результата из контролера напрямую в шаблоне blade?

    В таких случаях лучше использовать inject
    @inject('metrics', 'App\Services\MetricsService')
    
    <div>
        Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
    </div>

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

    P.S. Здесь в ответах был еще вариант расшарить переменные в провайдере но автор почему-то удалил его, а вариант вполне неплохой когда код точно есть на каждой странице (например меню)
    Так что лучше всего будет попробовать два варианта и потом решить какой удобнее в твоем случае
    Ответ написан
    2 комментария
  • Ошибка в namespace не найдет класс?

    @green_goo
    Нужно добавить подключение автозагрузчика
    Ответ написан
    Комментировать
  • Как сформировать ленту новостей/событий из нескольких таблиц (php/mysql)?

    @zhaar
    select top 10 * from news1 order by postdate desc
    union all
    select top 10 * from articles1 order by postdate desc
    union all
    ...

    Это самый простой вариант.
    Наверти сюда условия для выборки по каждым статьям (даты отсечки, автора и пр.) и будет щастье
    Ответ написан
    4 комментария
  • В чем разница между 'фабричным методом' и 'простой фабрикой'?

    @rundle
    Привет.

    Пример с сайта неудачный. Он не показывает выразительность фабричного метода в отличие от фабрики. Я изменил пример ниже.

    Простая фабрика не является паттерном проектирования, это скорее идиома программирования. Простая фабрика предоставляет интерфейс для создания одного продукта. Отличие фабричного метода в создании набора классов, создающих экземпляры - конкретные классы расширяют класс с фабричным методом.

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

    Например, мы открыли в Москве и Питере магазин по продаже телефонов и в классе BeelineStore есть общие методы для всех телефонов (код на java схематичный). Samsung стал поддерживать 5G интернет, поэтому сделаем тариф для этих телефонов дороже.

    spoiler
    abstract class IMobile {
    	void prepare() {
    		System.out.println("Подготовим документы по продаже от ООО Билайн");
    	}
    	void setInternetTariff() {
    		System.out.println("Установим стандартный тариф Билайна для интернета");
    	}
    	void box() {
    		System.out.println("Упакуем в желтый пакетик");
    	}
    }
    
    class BeelineSamsung extends IMobile {
    	void setInternetTariff() {
    		System.out.println("Установим отдельный тариф для 5G интернета");
    	}
    }
    
    class BeelineIPhone extends IMobile {}
    
    class BeelineStore {
    	public IMobile orderPhone(String type) {
    		IMobile phone = null;
    
    		if (type.equals("samsung")) {
    			phone = new BeelineSamsung();
    		} else if (type.equals("iphone")) {
    			phone = new BeelineIPhone();
    		}
    
    		phone.prepare();
    		phone.setInternetTariff(); 
    		phone.box();
    
    		return phone;
    	}
    }
    
    // использование
    // var mobileStore = new BeelineStore();
    // mobileStore.orderPhone("samsung"); <- клиентский код

    Однако при изменении, удалении или добавлении новых видов телефонов мы бы открывали наш класс BeelineStore и расширяли новыми конкретными типами. А если мы добавим модели телефонов, то дерево условий станет сложнее. Если одни аспекты системы изменяются, а другие остаются неизменными — пора заняться инкапсуляцией.

    spoiler
    class MobileFactory {
    	public IMobile getMobile(String type) {
    		if (type.equals("samsung")) {
    			return new BeelineSamsung();
    		} else if (type.equals("iphone")) {
    			return new BeelineIPhone();
    		}
    
    		return null;
    	}
    }
    
    class BeelineStore {
    	MobileFactory factory;
    
    	public BeelineStore(MobileFactory factory) {
    		this.factory = factory;
    	}
    
    	public IMobile orderPhone(String type) {
    		IMobile phone;
    
    		phone = factory.getMobile(type);
    
    		phone.prepare(); 
    		phone.setInternetTariff();
    		phone.box();
    
    		return phone;
    	}
    }
    // использование 
    // var mobileFactory = new MobileFactory();
    // mobileStore = new BeelineStore(mobileFactory);
    // mobileStore.orderPhone("samsung"); <- замечу, клиентский код не изменился

    Окей - мы вынесли процесс создания телефонов - это и есть фабрика. И тут мы расширяемся, дела в нашей компании пошли хорошо и мы открываем филиалы на Урале. Тарифы на Урале будут дешевле, как стандартные, так и для 5G интернета. А также в Москве и Питере запускается программа по обмену старых телефонов на новые. И тут нам помогает фабричный метод.

    spoiler
    abstract class BeelineStore { // класс становится абстрактным
    	protected abstract IMobile getMobile(String type); // возвращается метод getMobile
    
    	public IMobile orderPhone(String type) {
    		IMobile phone = getMobile(type);
    
    		phone.prepare(); 
    		phone.setInternetTariff();
    		phone.box(); 
    
    		return phone;
    	}
    }
    
    class CenterBeelineSamsung extends IMobile {
    	void setInternetTariff() {
    		System.out.println("Отдельный тариф для 5G интернета в центре России");
    	}
    }
    
    class CenterBeelineIPhone extends IMobile {}
    
    class СenterBeelineStore extends BeelineStore {
    	public IMobile getMobile(String type) {
    		if (type.equals("samsung")) {
    			return new CenterBeelineSamsung();
    		} else if (type.equals("iphone")) {
    			return new CenterBeelineIPhone();
    		}
    
    		return null;
    	}
    	
    	public void tradeIn(String phone) {
    		System.out.println("Вы обменяли старый телефон на новый с доплатой");
    	}
    }
    
    class UralBeelineSamsung extends IMobile {
    	void setInternetTariff() {
    		System.out.println("Отдельный тариф для 5G интернета на Урале");
    	}
    }
    
    class UralBeelineIPhone extends IMobile {
    	void setInternetTariff() {
    		System.out.println("Отдельный тариф для стандартного интернета на Урале");
    	}
    }
    
    class UralBeelineStore extends BeelineStore {
    	public IMobile getMobile(String type) {
    		if (type.equals("samsung")) {
    			return new UralBeelineSamsung();
    		} else if (type.equals("iphone")) {
    			return new UralBeelineIPhone();
    		}
    
    		return null;
    	}
    }
    // использование
    // var centerBeelineStore = new СenterBeelineStore();
    // centerBeelineStore.orderPhone("samsung");
    // var uralBeelineStore = new UralBeelineStore();
    // uralBeelineStore.orderPhone("samsung");

    Мы смогли сохранить единые для всех магазинов стандарты оформления заказа, а также добавили региональные отличия.
    То есть фабричный метод гораздо гибче. Простая Фабрика обладает узкой специализацией, а фабричный метод ведет к созданию инфраструктуры, в которой реализация выбирается субклассами.
    Простая Фабрика инкапсулирует создание объектов, но она лишена гибкости фабричного метода в изменении создаваемых продуктов.
    Ответ написан
    Комментировать
  • Заказчик хочет больше работы за фиксированную сумму и не хочет доплачивать. Как урегулировать спор?

    x67
    @x67
    Ваш договор не имеет юридической силы в силу того, что в нем не прописаны ключевые условия. Например, если заключить договор, что Маша должна пачку молока Саше потому что он бука, то такой договор прокатит только в детском садике (потому что у них все серьезно). Правда еще следует поискать что нибудь подобное в законодательстве той страны, в юрисдикции которой может быть рассмотрен договор и действий которой вы опасаетесь ( если возвести все до крайней степени, то Россия, потому что ваша страна и Индия, потому что его страна, а вы хотите когда-нибудь там побывать и опасаетесь что из-за тяжб вам может быть отказано в получении визы).
    С психологической точки зрения наверное стоит спокойно объяснить заказчику, что он чудак, вы сделали то и то, потому что это было обговорено до начала проекта в скайпе, как вы и договорились в договоре, за это он должен вам денег и дальше вы можете сотрудничать на новых условиях или не сотрудничать вообще. В крайнем случае может стоит чуть пригрозить, сказав что у вас есть записи разговоров в скайпе и он полностью отвечает за свои поступки перед законом, а вы принципиальный человек. Если не получается найти точку взаимодействия, то просто прекращайте общение и удаляйтесь искать более адекватных клиентов и писать себе памятки о том, как не стоит заключать договора)
    Ответ написан
    Комментировать
  • В чем смысл быть гуру тостера?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Частенько замечаю аккаунты со вкладом в пару тысяч и количеством вопросов 5-10.

    ну не так уж и частенько

    У меня вопрос к вам, обладатели таких аккаунтов. Для чего вы это делаете?

    - зарядка для ума
    - интересные задачи
    - смена деятельности
    - имидж
    - самолюбование (не хочется признавать, но наверное есть)
    Ответ написан
    Комментировать
  • В чем смысл быть гуру тостера?

    @immaculate
    Программист-путешественник
    Первое время было просто интересно отвечать. Кажется достаточно безобидным и даже полезным способом прокрастинации.

    Но тостер меня слегка удручает, потому что много элементарных вопросов, ответ на которые содержится в FAQ языка/библиотеки/фреймворка или в первом же результате поиска Google. Отвечать людям, которые не потрудились потратить даже 5 минут на самостоятельный поиск ответа, не хочется. Это напрасная трата времени, которая вредит всем участникам процесса. Поэтому стал заходить сюда все реже.

    Но вот на StackOverflow у меня приличный score. И пару раз я получал предложения пройти собеседование благодаря своему профилю на SO. К сожалению, видимо он не настолько высокий, чтобы предлагали работу сразу без собеседования.

    Но времени стало все меньше, и на SO тоже проблемы:
    1) Вопросы делятся на элементарные, как здесь, либо настолько сложные, что для ответа потребуется потратить солидную часть дня. Плюс, скорее всего, кто-то сделает это раньше вас, а тот, кто задавал вопрос, не потрудится нажать кнопочку плюса в карму, тем более, отметить решением. Выбрасывать значительную часть своего времени в корзину не хочется.
    2) Дуракам, ищущим простых путей, тоже стало известно, что HR ищут перспективных кандидатов на SO. Поэтому развелась масса отвечающих, которые ведут ковровые отвечания на все вопросы в SO, даже не дочитав до конца вопрос. Соотношение сигнал/шум сильно ухудшилось.

    В общем, как только появляется какая-то метрика, сразу же находятся желающие эту метрику подкрутить, чтобы получить какие-то плюшки с минимальными усилиями.
    Ответ написан
    Комментировать
  • В чем смысл быть гуру тостера?

    Jump
    @Jump
    Системный администратор со стажем.
    для чего просиживаете на тостере по 5-6 часов в день?
    Работа подразумевающая постоянное нахождение онлайн, но не напряженная, и позволяющая отвлекаться на разные занятия, вроде там суп сварить, или на тостере ответить. За работу деньги идут, а тостер позволяет отвлечься.
    Отвечая на вопрос, постоянно остаешься в теме, узнаешь много нового, и смотришь на многие проблемы под другим углом.
    Любой "гуру" может что-то недопонимать, и при ответе это недопонимание быстро исправят.
    Ответ написан
    1 комментарий
  • В чем смысл быть гуру тостера?

    Maksclub
    @Maksclub
    maksfedorov.ru
    много причин:
    1. Помощь другим, понятное дело

    2. Мне помогло в началае карьеры вот чем -- начал работать программистом и в ходе нее сталкивался с одного рода проблемами, тогда как тут люди сталкиваются с широким спектром проблем и задач и в начале пути мне этот вал давал развитие!
    Да, я открывал вопрос, не знаю ответ -- пошел курить мануалы, читать SO и гуглить, открывал IDE и продумывал что и как... потом писал ответ

    3. Некий способ запомнить (как блог работает), помогая другим запоминаешь сам, формулируя мысль... Грубо говоря не 1% инфы запоминаешь, а 3% :):):) примерно, но больше в разы точно

    4. Социальная причина, тут грубо говоря собраны "собратья" по отрасли, с моими друзьями не обсудить и не рассказать про абстракции, про паттерны

    5. Помогает в трудоустройстве, не во всех случаях, но в некоторых точно

    6. С особенностью слежу за новой технологией, которую изучаю, и смотрю на ответы крутых ребят. Тут есть человек так 20, которых стоит читать в отрыве от вопросов, так как к ответу подходят системно

    7. Записная книжка -- всегда есть куда обратиться к своим же ответам
    Ответ написан
    Комментировать
  • В чем смысл быть гуру тостера?

    NeiroNx
    @NeiroNx
    Программист
    Когда ты думаешь что все знаешь, заходишь на тостер, начинаешь читать вопросы и понимаешь что не знаешь даже и половины. Начинаешь изучать что-то новое - знаешь уже больше. Учишься искать ответ в интернете быстрее чем это сделают другие.
    Ответ написан
    2 комментария