Записи с тегом «PHP»
Снова об отрицании в регулярном выражении
Реализовать условие «строка не содержит подстроку» напрямую в регулярном выражении нельзя, но можно воспользоваться т.н. negative lookahead (которые уже были описаны в предыдущем сниппете):
<pre> <?php $pattern = "/^(?!(.*?)HTC)/"; // Совпадение будет со строкой не содержащей 'HTC' preg_match($pattern, "HTC A310 Explorer", $matches); print_r($matches); preg_match($pattern, "Нетбук Acer Aspire 3750", $matches); print_r($matches); ?> </pre>
Другой вариант реализации предложен на stackoverflow.com.
Ошибка CURLE_SSL_CACERT(60) и API ВКонтакте
Обращение к API ВКонтакте требует осуществления запросов по протоколу HTTPS. Для первых тестов все проверки можно легко отключить:
$ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_SSL_VERIFYPEER => FALSE, CURLOPT_SSL_VERIFYHOST => FALSE, ));
Но в рабочем приложении хотелось бы использовать соединения со всеми проверками. Если их включить, возникнет ошибка с номером 60 (CURLE_SSL_CACERT). Причина этой ошибки в том, что у cURL'а, в отличие от браузеров, нет набора корневых сертификатов, поэтому проверить подлинность сервера, к которому осуществляется соединение он не может (подробнее о работе с SSL сертификатами в cURL можно прочитать здесь).
У Facebook для решения этой проблемы в комплекте с PHP SDK есть файл с цепочкой сертификатов, который указывается с помощью параметра CURLOPT_CAINFO:
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/fb_ca_chain_bundle.crt');
В теории, сгенерировать такую цепочку несложно прямо из Firefox, но у меня она почему-то не заработала. Другой способ решения проблемы — скачать копию корневых сертификатов от Mozilla Firefox в понятном для cURL формате и указать путь к файлу в параметре CURLOPT_CAINFO.
Минус решения — как показал пример истории с DigiNotar, необходимо пристально следить за актуальности набора корневых сертификатов.
Как получить полный текст POST-запроса в PHP
При разработке REST-подобного API понадобилось получить данные из POST не в виде массива полей форм, а «как есть». Оказалось, что для этого можно использовать file_get_contents():
$raw_post_data = file_get_contents('php://input');
Рекурсивное удаление папок от имени веб-сервера на PHP
На серверах, где PHP-скрипты запускаются от одного пользователя, файлы по FTP создаются от другого, а доступ по SSH осуществляется от третьего (хорошо, что всё чаще используется Apache-MPM-ITK) иногда бывает нужно удалить какие-нибудь временные файлы. Более правильное решение, наверное, использование PHP Shell или, если все пользователи относятся к одной группе, выставить нужные права на файлы для группы.
После того, как в третий раз пришлось писать такой скриптик, решил его положить сюда :).
Переключение языка интерфейса в NetBeans 7.0
Недавно вышедний NetBeans 7.0 получил полную русскую локализацию. При запуске IDE на локализированной ОС используется русский язык интерфейса и сменить его на более привычный английский через диалоги настройки нет возможности.
Решение — добавить --locale en_US в параметр netbeans_default_options= в файле <netbeans folder>/etc/netbeans.conf.
nl2br() для ASP.NET MVC
Упрощённый аналог PHP-функции nl2br(), оформленный в виде extension-метода к helper'у ASP.NET MVC:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Linq.Expressions;
namespace CrispStudio.Helpers
{
public static class HtmlNl2BrExtensions
{
public static string Nl2br(this HtmlHelper html, string input)
{
return input.Replace(Environment.NewLine, "<br />\r\n");
}
}
}
Пример использования:
<div> <%= Html.Nl2br(Html.Encode(Model.Text)) %> </div>
О возможных усовершенствованиях (поддержке всех типов переводов строк, например) можно прочесть на StackOverflow.
Отключение debug-режима eAccelerator'а
Случайно обнаружил, что eAccelerator на FreeBSD сервере по умолчанию запускался с включённым параметром eaccelerator.debug, что приводило к большому числу сообщений в error-логе веб-сервера. Установка параметра в php.ini решила проблему:
eaccelerator.debug="0"
Массовая (пакетная) перекодировка файлов в UTF-8
При переделке старого сайта понадобилось преобразовать большое количество файлов, разбросанных по вложенным папкам, из CP1251 (Windows-1251) в UTF-8. К огромному удивлению, готового решения для Windows не нашлось (на *nix это можно сделать с помощью find и iconv), поэтому пришлось набросать небольшой скрипт.
Увеличение ограничений на количество переменных POST в PHP с Suhosin Patch
При переносе одного старого проекта на новый сервер возникла проблема: из формы с большим количеством полей не передавались все данные. Причиной оказались настройки Suhosin Patch'a с которым был собран PHP.
После увеличения следующих параметров, проблема была решена:
suhosin.request.max_vars suhosin.post.max_vars
