Оптимизация SQL (в частности MySQL) довольно обширная тема и нет единого рецепта, который бы дал ответ на ваш конкретный вопрос. Поэтому попробую отталкиваясь от собственного опыта оптимизации сайтов поделиться своими знаниями в этом материале. Стоит также отметить, что речь сейчас будет только о запросах SELECT, остальные запросы не так критичны в плане скорости работы зачастую.
Рубрика: webdev
Обучалки от Евгения Алферова
Отслеживание конверсии в соцсети Вконтакте
Кстати, хочу посоветовать сайт https://trustoff.ru — хороший сайт о мобильных устройствах :)
nginx + fastcgi + php-fpm + cache
В интернетах не смог нагуглить внятной инструкции по настройке связки nginx + php-fpm и при этом, чтобы nginx кешировал странички.
Почему-то инструкции либо по настройке fastcgi, либо по настройке кеша.
Совместить эти два мануала почему-то никто не осилил и это у меня вызвало некоторые сложности.
Конфиг php-fpm максимально стандартный, там не с чем особо мудрить
Короче, делюсь с вами инфой:
server { listen your_ip:80; server_name example.com; access_log /var/www/example.com/logs/nginx.access.log; error_log /var/www/example.com/logs/nginx.error.log info; root /var/www/example.com/www; # Искренне не понимаю, почему в предыдущих 3х строчках нельзя использовать переменные. # Обжегся, когда пытался сделать красиво в конфиге index index.php; # задаем индексный файл, который должен открываться сначала # идея в том, что весь сайт роутится через него. но всегда есть необходимость открыть просто какой-нибудь пхп файлик # поэтому оставляем эту возможность (подмена ниже) set $fpm_name "/index.php"; # блок конфига, который будет обрабатывать все запросы, кроме тех, что хотим кешировать location / { try_files $uri $uri/ /index.php?$query_string; if ($uri ~ \.php$){ # а вот и подмена set $fpm_name $uri; } include fastcgi_params; include fpm_params; } # описываем что хотим кешировать location ~* ^(\/(articles|reports)\/[0-9]+.+)$ { # в моем случае не нужно кешировать, если пользователь авторизирован на сайте. # если вам это не требуется, то просто удалите if if ($http_cookie !~* "cabinet") { rewrite ^ /ng_cache last; } include fastcgi_params; include fpm_params; } # внутренний урл для кеша location /ng_cache { internal; fastcgi_cache examplecom_cache; fastcgi_cache_valid 200 301 302 304 3m; fastcgi_cache_key "$request_method|$http_if_modifed_since|$http_if_none_match|$host|$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_hide_header "Set-Cookie"; fastcgi_ignore_headers "Cache-Control" "Expires"; include fastcgi_params; include fpm_params; } ........ }
и файлик fpm_params:
# не забываем указать правильный путь до сокета fastcgi_pass unix:/var/run/php-fpm/fcgi-php.sock; fastcgi_index $fpm_name; # тут пригождается наша переменная $fpm_name fastcgi_param SCRIPT_FILENAME $document_root$fpm_name; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k
Запустили парфюмерный магазин
CSV выгрузка из PHP, которую понимает Excel
Надо сказать, что Excel любит формат не csv, а tsv. Иными словами, в данном формате разделителем является символ табуляции.
Помимо этого файл должен быть в кодировке UTF-16LE и содержать битовый маркер (BOM) — «\xFF\xFE»
Итого, вот такой код у вас должен получиться, чтобы cvs, создаваемый вами успешно открылся в экселе:
echo "\xFF\xFE"; // $output - переменная, в которой записан весь csv, UTF-8 - исходная кодировка, в которой находится $output echo mb_convert_encoding($output, "UTF-16LE", "UTF-8");
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. Ниже прикладываю скриншот сайта:
Читать далее Ни курсы, ни книги тут уже не помогут..
Куда складывать загружаемые пользователями файлы для обработки их редакцией сайта?
Другой заголовок:
Как загрузить файлы в яндекс.диск с помощью 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