голосование
BASH
PHP
Javascript
HTML
Программы
Firebird
Майнинг
PostgreSQL
Хостинг
Железо
Ресурсы
GIT
SEO
Oracle
Python
Мобильные технологии
Ремонт
Mercurial
Заработок на сайте
Docker
Проголосуйте за категорию!
счётчик
Яндекс.Метрика

Замена url-адресов для картинок в зависимости от сервера PHP

Допустим вы создали страницу с текстом и картинками. Когда вы находитесь на локальном сервере, у вас отображаются картинки. Но если вы скопируйте базу данных и перенесёте SQL-код вашей базы на удалённый сервер, то может возникнуть небольшая проблема. Ваши картинки имеют другой урл-адрес. Конечно, можно при помощи phpMyAdmin заменить url-адрес каждой картинки. Но что делать если картинок много на странице. Перебивать адрес для каждой? Потратите много времени. Есть выход! Воспользуемся массивом $_SERVER. Читайте статью массив $_SERVER в PHP. Предлагаю вам свою фирменную функцию.


/*
 * replaceUrl($str, $url='remote')
 * замена url если на локальной машине
 * remote - url меняется на trainingweb.ru
 * local или др. - меняется на engine
*/
public function replaceUrl($str, $url='remote')
{
	// меняем " на " для CKEditor
	$element = '"';
	if(substr_count($str, $element) > 0) 
	{
		$str = str_replace($element, '"', $str);
	}
	
	// если на локальном сервере
	if($_SERVER['REMOTE_ADDR'] == '127.0.0.1')
	{
		$replace = array('http://engine', 'http://trainingweb.ru');
		if($url == 'remote') $replace = array_reverse($replace);
		
		// 1-ищем, 2-меняем
		$str = str_replace($replace[1], $replace[0], $str);
		return $str;
	}
	else return $str;
}

Вы должны точно представлять себе что такое локальный сервер и что такое удалённый сервер. Если эта функция работает, то вам не обязательно задумываться о том какой у вас url-адрес. Она просто заменит урл в зависимости от ip-адреса. Более того при записи в базу данных вы можете сразу заменить url ваших картинок на url удаленного сервера, и больше не менять url-пути картинок. После того как получен POST-массив, вы сразу можете обработать элементы массива моей функцией replaceUrl($arr['text'], 'remote').


//POST-массив
$arr = $POST;
/*для локального сервера 
применяете для просмотра страниц 
на локальном компьютере*/
$arr['text'] = replaceUrl($arr['text'], 'local'); 
/*при добавлении страницы в базу данных 
для удаленного сервера*/
$arr['text'] = replaceUrl($arr['text'], 'remote'); 

Вы можете использовать функцию как вам захочется, но я бы посоветовал сразу менять урл на урлы удалённого сервера. Когда вы будите просматривать страницы на локальном сервере, то имеет смысл воспользоваться этой функцией. Она хороша как для записи в базу данных, так и при просмотре. Если на удалённом сервере функция сработает, то она не будет менять url из-за ip (127.0.0.1).

При редактировании данных в редакторе CKEditor, в текст добавляется символ \. Потом отредактированный текст с этим символом будет записан в базу данных. Это очень странно и нужно бороться с этим моментом. Ошибка хотя бы в один символ в урле не позволит браузеру отобразить картинку.


// меняем " на " для CKEditor
$element = '"';
if(substr_count($str, $element) > 0) 
{
	$str = str_replace($element, '"', $str);
}
просмотры: 2421, уровень: лёгкий уровень, рейтинг: 5, дата: 2015-08-08 20:00:00
проголосовать:

Комментарии:

добавил(а): Сергей
дата: 2015-09-03 16:06:09
Спасибо, помогло! Отличный сайт))
добавил(а): Егор Астапов
дата: 2015-09-03 17:48:58
Не за что )))





поиск
реклама
банеры
сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
http://trainingweb.ru/redirect/pingadmin мониторинг сайтов сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
http://trainingweb.ru/redirect/domains домен RU домен RU всего за 99 рублей
http://trainingweb.ru/redirect/well_web_vps_kvm Аренда VPS KVM в Европе Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.