Архів категорії: PHP + SQL

Основные преимущества PHP фреймворков

В этой статье я хотел бы рассказать вам о PHP фреймворках. PHP фреймворк имеет преимущество перед готовыми cms или чистым PHP. Для быстрого старта разработки своей системы лучше использовать готовый PHP фреймворк. Один из самых популярных Я бы рекомендовал использовать CodeIgniter. Основным преимуществом PHP фреймворков является то, что они и быстро работают по сравнению с готовыми популярными cms такими как в WordPress, джумла и drupal. Если вы построите свой сайт на фреймворке, то он у вас будет работать не только быстрее, но он будет потреблять меньше ресурсов хостинга, а это значит что вы сможете заказать более дешевый хостинг, при этом сайт будет работать точно также, как и на WordPress, например.

В фреймворке есть встроенная защита от всякого рода атак, включая xss атаки, атаки при передачи данных через post и get. Поэтому вы можете сосредоточиться только на написании кода. Вам не нужно думать о безопасности, поэтому разработка становится быстрее. Как правило на фреймворке уже есть какой-то пример или шаблон, вы сможете посмотреть как сделать то или иное действие. Готовые системы управления сайтом тоже хорошее, но у них есть плагины в которых может спрятаться вирус или вредоносный код. Проверить все плагины очень сложно, потому что каждый разработчик пишет их по-своему, а разбираться в чужом коде очень непросто. Зачастую там очень много лишнего кода, поэтому например профессиональные разработчики сайтов на WordPress стараются использовать как можно меньше плагинов, потому что они и нагружают сервер и могут внести какие-то скрытые вирусы. Когда же вы пишете свою собственную систему управления сайтом, то вы знаете всё что вы писали. У вас свой код, он лаконичный, ничего лишнего и вы выигрываете за счет этого таким образом.

В этом включении я хотел бы поделиться сайтом Днепродзержинск. Славянск где я заказываю билеты, когда мне нужно ехать куда-нибудь по работе в пределах Украины. Посетив этот сайт можно купить свой жд билет онлайн. К оплате принимаются карты ПриватБанк, что есть дополнительным плюсом.

А теперь вернемся к основной теме. Я призываю создавать свои собственные системы управления сайтом чтобы хакерам было сложнее писать спам например. Из истории своей разработки могу поделиться таким секретом. У меня есть на сайтах форма комментариев, и в неё практически никогда не писали спамы всякие боты и так далее. А вот только я установил WordPress – сразу же начали писать всякие боты, потому что это очень популярная система управления и разработаны специальные пауки – spiders, которые сканируют абсолютно все новые и старые сайты и пытаются отправить комментарий по шаблону. На моей собственной системе управления сайтов не было никакой защиты никакой капчи и форма была сделана просто по технологии ajax. И мне сейчас на сайтах не пишут боты, ничего не пишет. Поэтому я рассматриваю это как плюс и так как если у вас будет своя собственная, скажем так скрытая от чужих глаз система управления сайтом, то её будет сложно сломить, потому что ни у кого не будет её кода. А вот WordPress или drupal доступен для всех и программисты-злодеи проанализировав код могут найти дыру и использовать её для того чтобы сломать ваш сайт или внести какое-то зловредное изменение, или возможно ссылку для продвижения своих проектов. Поэтому несмотря на всю популярность Вордпресса и прочих систем, Я думаю PHP фреймворки не теряют свою популярность. Они развиваются и будут жить и живут, а это хорошо и правильно.

Как вывести список картинок в папке на РНР

Рассмотрим Как вывести список картинок в папке на РНР и только тех картинок, ширина которых меньше 500 пикселей.

Для решения этой посталенной мне задачи был прочесан интернет. Проверены некоторые готовые куски кода, которые оказались нерабочими. В процессе был выведен рабочий код.

Особенностью работы скрипта является также то, что он ищет все подпапки указанной папки, что полезно для владельцев сайтов и блогов, которые складывают картинки по годам, месяцам. Например годы 2013, 2014, 2015, 2016, 2017, 2018, 2019 и месяца 01, 02, 03, 04, 05, …. 10, 11, 12.

РНР код

// Return an array with the list of sub directories of $dir
function getSubDirectories($dir) {
	$subDir = array();
	// Get and add directories of $dir
	$directories = array_filter(glob($dir), 'is_dir');
	$subDir = array_merge($subDir, $directories);
	// Foreach directory, recursively get and add sub directories
	foreach ($directories as $directory)
		$subDir = array_merge($subDir, getSubDirectories($directory . '/*'));
	// Return list of sub directories
	return $subDir;
}


function echoImagesUrls($directory) {
	$allowed_types = array("jpg", "png", "jpeg"); //разрешеные типы изображений
	$file_parts = array();
	$ext = "";
	$title = "";
	$i = 0;
//пробуем открыть папку
	$dir_handle = @opendir($directory) or die("Ошибка при открытии папки !!!");
	while ($file = readdir($dir_handle)) {	//поиск по файлам
		if ($file == "." || $file == "..")
			continue; //пропустить ссылки на другие папки
		$file_parts = explode(".", $file);		 //разделить имя файла и поместить его в массив
		$ext = strtolower(array_pop($file_parts));	//последний элеменет - это расширение


		if (in_array($ext, $allowed_types)) {
			$tempSizes = getimagesize("$directory/$file");
			$width = $tempSizes[0];
//			
			if ($width <= 500){
				$tempEcho = "<div>	https://salomoon.pp.ua$directory/$file </div>";
				echo str_replace('./images/', '/images/', $tempEcho);
			}
			$i++;
		}
	}
	closedir($dir_handle); //закрыть папку
}

$manyDirs = getSubDirectories("./images");
foreach ($manyDirs as $oneDir){
	echoImagesUrls($oneDir);
}

Если вы заказываете себе ссылки, то данная функция очень поможет вам собрать ссылки на картинки.

Если вы сами затрудняетесь в установке кода или вам нужна какая нибудь помощь – вы можете нанять меня совсем недорого. Обсуждаем в комментариях.

Корисні команди MySql

Усі ці запити мають виконуватись в РНРMyAdmin, таблиця b_posts у вас може бути wp_posts , b_ і wp_ це префікси таблиць, які можна довільно вибрати при встановленні WordPress.

Це код, який дозволить замінити посилання в тексті статті на Вордпресс.

UPDATE `b_posts` SET `post_content` = replace(post_content, 'blohher.xofportal.ru', 'salomoon.info')

А цей код дозволяє видалити параметри ширини і висоти картинок в тексті (в мене на старій системі всі картинки такого розміру, які потім розтягувались за допомогою скріпту джаваскріпт.

UPDATE `b_posts` SET `post_content` = replace(post_content, 'width="200" height="150"', '')

UPDATE `b_posts` SET `post_content` = replace(post_content, 'height="150" width="200"', '')

А цей код дозволить включити коментарі на всі пости. Точніше при створенні скрипту на мові РНР для експорту даних в файл CSV, я помилково для коментарів встановив дозвіл як 1, а треба ‘open’.

UPDATE `b_posts` SET `comment_status` = replace(comment_status, '1', 'open')

Шаблон функции для работы по AJAX

Те, кто из вас уже создавал функции поймут этот код. А кто не создавал – учитесь.

function ajax()
{
$a = array();
$a[‘result’] = ‘x’;
if (false) $a[‘error’] = ‘FAIL’;
if (isset($a[‘error’]))
{
echo json_encode($a);
return;
}
$a[‘result2’][] = ‘x1’;
$a[‘result2’][] = ‘x2’;
echo json_encode($a);
}

Преобразование SQL даты в PHP дату

Эта записка о частой необходимости программиста, создающего сайты. Все выглядит так: в базе данных тип DATE, который в РНР выглядит как обычная строка “2011-06-13”. Наша цель преобразовать эту дату в формат, пригодный для использования функцией date(). А с помощью этой функций мы сможем получить все что угодно:

  • день
  • месяц буквами (полный, 3 буквы)
  • год
  • високосный год?
  • день недели
  • номер месяца

Все настолько просто

$phpdate = strtotime( $mysqldate );

Используем так

$pattMonth = ‘M’;
$pattDay = ‘j’;
$pattYear = ‘Y’;
$phpdate = strtotime($sqlDate);
$day = date($pattDay, $phpdate);
$mon = date($pattMonth, $phpdate);
$year = date($pattYear, $phpdate);

Реальный пример, как получить дату вида 27 декабря, 2011

$phpdate = strtotime($date);
$day = date(‘j’, $phpdate); // day
$mon = getRusDate(date(‘M’, $phpdate)); // month
$year = date(‘Y’, $phpdate); //year 2011
$tdate = “$day $mon, $year”;
echo $tdate;

На всякий случай код для обратного действия – записи из РНР в базу данных

$mysqldate = date( ‘Y-m-d’, $phpdate );
$mysqldatetime = date( ‘Y-m-d H:i:s’, $phpdate );

Получение полной временной метки

$mysqldate = $arrayData[$id][‘date’].’ ‘.$arrayData[$id][‘time’];
$phpdate = strtotime($mysqldate);
$need = date(‘r’, $phpdate);

На входе у нас “2011-04-29 02:54:00”, на выходе “Thu, 14 Jul 2011 22:14:00 +0400”. Это живой пример для RSS.

Парадокс использования двух баз в CodeIgniter

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

$this->db->where(’email’, $e);

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

$this->mailDb = $this->load->database(‘maildb’, TRUE);
$this->mailDb->limit(1);

При использовании я наткнулся на парадокс – если пользователи базы данных одинаковые, то $this->db-> “переписывается”, и начинает обращаться ко второй базе, в моем случае это конфигурация базы данных maildb. Конечно же это генерирует ошибки базы данных. Можно в таком случае обойти ошибки, если сначала вызывать всё со стандартной базы $this->db-> , а потом уже со второй базы $this->mailDb->. Но удобно ли это? На долго ли такого извращения хватит?

Я рекомендую просто создать нового пользователя для второй базы данных, и использовать две базы параллельно, вперемешку и как угодно. Обычно на хостинге для каждой базы прилагается свой пользователь. Например у меня на хостинге на тарифе VIP 100 баз данных и 100 пользователей, так что проблем не возникает.