Byte Order Mark (BOM) в PHP — как определить?

А очень просто!
Для этого вам понадобится вот такой вот код:

// читаем содержимое файла
$file = file_get_contents($path);
$sets = array(
	"\xFE\xFF" => "UTF-16BE",
	"\xFF\xFE" => "UTF-16LE",
	"\xFE" => "UTF-16",
	"\xFF" => "UTF-16",
	"\xEF\xBB\xBF" => "UTF-8",
	"\x2B\x2F\x76\x38\x2D" => "UTF-7",
	"\x2B\x2F\x76\x38" => "UTF-7",
	"\x2B\x2F\x76\x38" => "UTF-7",
	"\x2B\x2F\x76\x2B" => "UTF-7",
	"\x2B\x2F\x76\x2F" => "UTF-7",
	"\xF7\x64\x4C" => "UTF-1",
	"\x0E\xFE\xFF" => "SCSU",
	"\xFB\xEE\x28" => "BOCU-1",
	"\x00\x00\xFE\xFF" => "UTF-32BE",
	"\xFF\xFE\x00\x00" => "UTF-32LE",
	"\xDD\x73\x66\x73" => "UTF-EBCDIC",
	"\x84\x31\x95\x33" => "GB-18030",
);
// предполагаем, что изначально файл у нас не в utf
$is_utf = false;
$source_charset = "";
foreach ($sets as $bom => $charset) {
	// определяем битовый маркер
	if (mb_substr($file, 0, mb_strlen($bom)) == $bom) {
		// отрезаем битовый маркер и запоминаем кодировку
		$file = mb_substr($file, mb_strlen($bom));
		$source_charset = $charset;
		$is_utf = true;
		break;
	}
}
if (!$is_utf){
	// строка не в юникод кодировке, поэтому делаем соответсвующие, нужные вам преобразования
}else{
	// строка в юникоде, конвертируем ее в utf-8 или же в любую другую удобную вам кодировку
	$file = iconv($source_charset, "UTF-8", $file);
}

Таким образом вы сможете успешно определить кодировку присланного вам файла и распарсить его без лишних трудозатрат

Ни курсы, ни книги тут уже не помогут..

Пару дней назад я познакомился с мальчиком обновился сайт spbvoditel.ru. Ниже прикладываю скриншот сайта:
2013-08-04 03.18.19 am
Читать далее Ни курсы, ни книги тут уже не помогут..

Куда складывать загружаемые пользователями файлы для обработки их редакцией сайта?

Другой заголовок:
Как загрузить файлы в яндекс.диск с помощью php curl?
А очень просто :)
Необходим пакет php5-curl (если у вас debian и ему подобные)

и вот такой вот код в php:

if (is_uploaded_file($_FILES['file']['tmp_name'])){
	$filename = basename($_FILES['file']['name']);
	$filesize = filesize($_FILES['file']['tmp_name']);
	$fh = fopen($_FILES['file']['tmp_name'], 'r');
	$remoteUrl = 'https://webdav.yandex.ru/';
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $remoteUrl.$filename); 
	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
	curl_setopt($ch, CURLOPT_USERPWD, "login@yandex.ru:password");
	curl_setopt($ch, CURLOPT_PUT, true);
	curl_setopt($ch, CURLOPT_INFILE, $fh);
	curl_setopt($ch, CURLOPT_INFILESIZE, $filesize);
	curl_exec($ch);
	fclose($fh);
}

gnokii smsd init.d script для debian squezee

В интернетах всего одна русскоязычная статья про настройку этого чуда под debian, и она в общем-то почти целиком работает за искючением init.d скрипта, который стартует сервис, но он остается в терминале висеть.
Читать далее gnokii smsd init.d script для debian squezee

Чуть-чуть похвастаюсь

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

nginx и Content-Disposition

Та же фигня, которая в прошлом посте, но теперь средствами nginx

        location ~* ^\/files\/([0-9]+)\/([0-9]+)\/(.*)\.(.*)$ {
                set $ext $4;
                root /path/to/docroot/;
                if ($args ~ "name=(.*)"){
                        set $filename $1.$ext;
                        add_header Content-Disposition 'attachment; filename=$filename';
                }
        }

mod rewrite и все-все-все

Решил поделиться с интернетом своими изысканиями
Задача: подменить имя файла при скачивании с сервера

На сайте имеется загрузчик файлов, который для удобства хранения переменовывает файлы в случайный набор букв и цифр, оставляя родным только расширение файла, типа вот так: 44srCfNgQPwWw60Wg3m5.doc
Так же в БД хранится заодно настоящее имя файла (которое можно изменять через админку). Файлы лежат в директории /files/2012/01/44srCfNgQPwWw60Wg3m5.doc
Просто и понятно.
Понятное дело, чтобы лишний раз не грузить сервер (без отдачи файла через php) мы будем отдавать файл напрямую (те тупо дадим ссылку на него), но в диалоге сохранения файла браузер выдаст сохранить как «44srCfNgQPwWw60Wg3m5.doc». Это некрасиво. Умные люди придумали такой заголовок: Content-Disposition: attachment; filename=»downloaded.pdf». Т.е. если бы мы отдавали файл через php, то мы бы просто обратились к нему через readfile и перед выплевыванием в браузер добавили бы в том числе такой заголовок и наш файл абракадабра имел бы человеческий вид.
А теперь я расскажу как это сделать средствами apache2 (уверен, нечто подобное можно сделать и для nginx, этим я озадачусь чуть позже, посколько nginx на тестовом сервере установлено не было на момент изыскания). Единственный минус данного способа в том, что мы должны еще передавать GET переменную name к скачиваемому файлу с нужным именем файла
Читать далее mod rewrite и все-все-все

И тут я вспомнил про netcat

sven: как только я нахожу кого–то кто готов написать под UMI? то после прочтения документации исполнитель испаряется. Точнее он входит в глубочайшую депрессию и говорит что писать под UMI это как ебаться в гамаке стоя на лыжах в водолазном костюме.
Еще никто не согласился :( пичалька
 Написал madgrandmaster aladdin, 07.10.2012 в 19.19 | ответить