Записи с тегом «PHP»

Снова об отрицании в регулярном выражении

29.12.2011 17:53 / Артём Волк / 109 просмотров / ...

Реализовать условие «строка не содержит подстроку» напрямую в регулярном выражении нельзя, но можно воспользоваться т.н. 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 ВКонтакте

11.09.2011 21:33 / Артём Волк / 367 просмотров / ...

Обращение к 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

11.09.2011 13:49 / Артём Волк / 424 просмотра / ...

При разработке REST-подобного API понадобилось получить данные из POST не в виде массива полей форм, а «как есть». Оказалось, что для этого можно использовать file_get_contents():

$raw_post_data = file_get_contents('php://input');

Рекурсивное удаление папок от имени веб-сервера на PHP

27.05.2011 12:44 / Артём Волк / 578 просмотров / ...
PHP

На серверах, где PHP-скрипты запускаются от одного пользователя, файлы по FTP создаются от другого, а доступ по SSH осуществляется от третьего (хорошо, что всё чаще используется Apache-MPM-ITK) иногда бывает нужно удалить какие-нибудь временные файлы. Более правильное решение, наверное, использование PHP Shell или, если все пользователи относятся к одной группе, выставить нужные права на файлы для группы.

После того, как в третий раз пришлось писать такой скриптик, решил его положить сюда :).

небольшой пример...

Переключение языка интерфейса в NetBeans 7.0

01.05.2011 11:45 / Артём Волк / 1920 просмотров / ...

Недавно вышедний NetBeans 7.0 получил полную русскую локализацию. При запуске IDE на локализированной ОС используется русский язык интерфейса и сменить его на более привычный английский через диалоги настройки нет возможности.

Решение — добавить --locale en_US в параметр netbeans_default_options= в файле <netbeans folder>/etc/netbeans.conf.

nl2br() для ASP.NET MVC

21.03.2011 9:22 / Артём Волк / 472 просмотра / ...

Упрощённый аналог 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'а

25.11.2010 22:54 / Артём Волк / 681 просмотр / ...

Случайно обнаружил, что eAccelerator на FreeBSD сервере по умолчанию запускался с включённым параметром eaccelerator.debug, что приводило к большому числу сообщений в error-логе веб-сервера. Установка параметра в php.ini решила проблему:

eaccelerator.debug="0"

Массовая (пакетная) перекодировка файлов в UTF-8

14.11.2010 22:13 / Артём Волк / 1627 просмотров / ...
PHP

При переделке старого сайта понадобилось преобразовать большое количество файлов, разбросанных по вложенным папкам, из CP1251 (Windows-1251) в UTF-8. К огромному удивлению, готового решения для Windows не нашлось (на *nix это можно сделать с помощью find и iconv), поэтому пришлось набросать небольшой скрипт.

PHP скрипт...

Увеличение ограничений на количество переменных POST в PHP с Suhosin Patch

14.11.2010 21:59 / Артём Волк / 983 просмотра / ...

При переносе одного старого проекта на новый сервер возникла проблема: из формы с большим количеством полей не передавались все данные. Причиной оказались настройки Suhosin Patch'a с которым был собран PHP.

После увеличения следующих параметров, проблема была решена:

suhosin.request.max_vars
suhosin.post.max_vars

Конвертация timestamp'a (unixtime) в экземпляр класса DateTime

07.08.2010 13:31 / Артём Волк / 1286 просмотров / ...

Встроенный PHP-класс DateTime наконец-то определил стандартный интерфейс для работы с датой и временем в PHP. Однако, конвертация значения даты в формате Unix time в экземпляр этого класса не так очевидна.

Пока найдено два способа...


Страница 1 из 3