Архив

Архив Сентябрь 2017
27 сентября 2017 Нет комментариев

Получить вначале строки, у которых текст в поле типа TEXT заполнен.

SELECT * FROM `table` ORDER BY CHAR_LENGTH(`content`)>0 DESC, `pos` ASC;
Categories: MySQL Tags:
25 сентября 2017 Нет комментариев

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

<?php
//config
$mysql=array(
	'host'=>'localhost',
	'user'=>'db_user',
	'password'=>'db_password',
	'database'=>'db_name',
);
mysql_connect($mysql['host'],$mysql['user'],$mysql['password']) or die ('error mysql_connect');
mysql_select_db($mysql['database']) or die ('error mysql_select_db');
mysql_query("set names 'utf8'");
//database functions
function get_from_base($what,$from,$where='(1)',$order='id'){
	if(trim($what)!=''&&trim($from)!=''&&trim($where)!=''&&trim($order)!=''){
		$arr=array();
		$query="select ".$what." from ".$from." where ".$where." order by ".$order;
		$result=mysql_query($query);
		echo mysql_error();
		if(mysql_num_rows($result)>0){
			while($tmp=mysql_fetch_assoc($result)){
				$arr[]=$tmp;
			}
			return $arr;
		}
	}else{
		return false;
	}
}
function get_one_from_base($what,$from,$where='(1)',$order='id'){
	if(trim($what)!=''&&trim($from)!=''&&trim($where)!=''&&trim($order)!=''){
		$arr=array();
		$query="select ".$what." from ".$from." where ".$where." order by ".$order;
		$result=mysql_query($query);
		echo mysql_error();
		if($result){
			if(mysql_num_rows($result)>0){
				return mysql_fetch_assoc($result);
			}
		}
	}
	return false;
}
//work functions
function make_tree($parent,$parent_chpu=''){
	$tree=array();
	$cats=get_from_base('*','wp_term_taxonomy',"`taxonomy`='product_cat' AND `parent`='".$parent."'",'term_taxonomy_id');
	if(count($cats)>0){
		$cat_chpu=$parent_chpu;
		for($i=0;$i<=count($cats)-1;$i++){
			//$tree[$i]=$cats[$i];
			$tree[$i]=array(
				'wid'=>$cats[$i]['term_id'],
				'description'=>$cats[$i]['description'],
			);
			$term=get_one_from_base('*','wp_terms',"`term_id`='".$cats[$i]['term_id']."'",'term_id');
			if($term['term_id']){
				//$tree[$i]['term']=$term;
				$tree[$i]['name']=$term['name'];
				$tree[$i]['chpu']=urldecode($term['slug']);
				$cat_chpu=$parent_chpu.'/'.urldecode($term['slug']);
			}
			$tree[$i]['link']='/product-category'.$cat_chpu;
			$tree[$i]['childs']=make_tree($cats[$i]['term_taxonomy_id'],$cat_chpu);
			$tree[$i]['items']=get_products($cats[$i]['term_taxonomy_id'],$cat_chpu);
		}
	}
	return $tree;
}
function get_products($parent,$parent_chpu=''){
	$products=array();
	$relationships=get_from_base('*','wp_term_relationships',"`term_taxonomy_id`='".$parent."'",'object_id');
	if(count($relationships)>0){
		foreach($relationships as $i=>$object){
			$product=get_one_from_base('*','wp_posts','`post_type`="product" and `ID`='.$object['object_id'],'ID');
			$product['meta']=get_from_base('*','wp_postmeta','`post_id`="'.$object['object_id'].'"','meta_id');
			//$products[]=$product;
			$products[$i]=array(
				'wid'=>$product['ID'],
				'name'=>$product['post_title'],
				'announce'=>prepare_html($product['post_excerpt']),
				'content'=>prepare_html($product['post_content']),
				'chpu'=>urldecode($product['post_name']),
				'link'=>'/shop'.$parent_chpu.'/'.urldecode($product['post_name']),
				//'meta'=>$product['meta'],
			);
			if(count($product['meta'])>0){
				foreach($product['meta'] as $meta){
					if($meta['meta_value']){
						switch($meta['meta_key']){
							case '_price':
								$products[$i]['price']=$meta['meta_value'];
							break;
							case '_thumbnail_id':
								$photo=get_one_from_base('*','wp_posts','`ID`='.$meta['meta_value'],'ID');
								if($photo['ID']){
									$photo_url=parse_url($photo['guid']);
									$products[$i]['photo']=$photo_url['path'];
								}
							break;
							case '_sku':
								$products[$i]['part']=$meta['meta_value'];
							break;
						}
					}
				}
			}
		}
	}
	return $products;
}
function prepare_html($html){
	$html=str_replace("\r\n\r\n","</p><p>",$html);
	$html=str_replace("\r\n","<br/>",$html);
	return "<p>".$html."</p>";
}
//work
$tree=make_tree(0);
echo '<pre>';print_r($tree);echo '</pre >';
?>
Categories: CMS Tags: ,
18 сентября 2017 Нет комментариев

Для пакетного изменения кодировки из windows-1251 в uft-8.
Изменить кодировку всех *.php файлов в папке:

find . -name "*.php" -exec iconv -f WINDOWS-1251 -t UTF-8 {} -o tmp \; -exec mv tmp {} \;

Изменить кодировку просто всех файлов в папке:

find . -type f -exec iconv -f WINDOWS-1251 -t UTF-8 {} -o tmp \; -exec mv tmp {} \;
Categories: Unix Tags: ,
18 сентября 2017 Нет комментариев

1. В /etc/ssh/sshd_config

UseDNS no
GSSAPIAuthentication no

затем service sshd restart

2. (Установлено случайно) очистить файл /var/log/btmp:

cat /dev/null > /var/log/btmp

/var/log/btmp — это лог неудачных попыток авторизации
/var/log/wtmp — удачных
смотреть что в нем:
last -f /var/log/btmp
или
utmpdump /var/log/btmp

Для ротации этого лога:
mcedit /etc/logrotate.d/btmp

/var/log/btmp {
    monthly
    minsize 1M
    create 0600 root utmp
    rotate 1
}
Categories: Unix Tags:
18 сентября 2017 Нет комментариев
phpbrew config
phpbrew fpm restart
Categories: Unix Tags:
18 сентября 2017 Нет комментариев

Решение на python чтобы распаковать zip архив, не имея установленной unzip (и не имея возможности или желания установить):

touch pyunzip
#!/usr/bin/env python3
import sys
from zipfile import PyZipFile
for zip_file in sys.argv[1:]:
	pzf = PyZipFile(zip_file)
	pzf.extractall()
chmod +x pyunzip
./pyunzip archive.zip

Еще возможен вариант на perl, (но без unzip он работать не стал):

#!/usr/bin/env perl
use Archive::Extract;
foreach my $filepath (@ARGV){
	my $archive = Archive::Extract->new( archive => $filepath );
	$archive->extract;
}
touch perlunzip
chmod +x perlunzip
./perlunzip archive.zip
You do not have 'Archive::Zip' installed - Please install it as soon as possible. at ./perlunzip line 5.
No '/bin/unzip' program found at ./perlunzip line 5.
Extract failed; no extractors available at ./perlunzip line 5.
Categories: Unix Tags: , ,
18 сентября 2017 Нет комментариев

Чтобы добавить правила для нескольких location:

location ~ ^/(path|path2/|file3.html|image4.png) {
	#rules
}
Categories: Unix Tags: