Архив

2021 год

Всего: 40 записей

php write ini file

function write_ini($array,$file){
	$res=array();
	foreach($array as $key=>$val){
		if(is_array($val)){
			$res[]="[$key]";
			foreach($val as $skey=>$sval){
				$res[]="$skey = ".(is_numeric($sval)?$sval:'"'.$sval.'"');
			}
		}
		else{
			$res[]="$key = ".(is_numeric($val)?$val:'"'.$val.'"');
		}
	}
	safefilerewrite($file,implode("\r\n",$res));
}
function safefilerewrite($fileName,$dataToSave){
	if($fp=fopen($fileName,'w')){
		$startTime=microtime(TRUE);
		do{
			$canWrite=flock($fp,LOCK_EX);
			if(!$canWrite){
				usleep(round(rand(0,100)*1000));
			}
		}
		while((!$canWrite)and((microtime(TRUE)-$startTime)<5));
		if($canWrite){
			fwrite($fp,$dataToSave);
			flock($fp,LOCK_UN);
		}
		fclose($fp);
	}
}
$ini=parse_ini_file($_SERVER['DOCUMENT_ROOT']."/file.ini");
$ini['key']='value';
write_ini($ini,$_SERVER['DOCUMENT_ROOT']."/file.ini");

js hover timeout

$('header nav ul li').hover(function(){
	var li=$(this);
	this.timeout=window.setTimeout(function(){
		li.addClass('hover');
	},200)
},function(){
	$(this).removeClass('hover');
	if(this.timeout){
		window.clearTimeout(this.timeout);
	}
});

Firebird LIMIT — лимитировать запрос

Аналогом в Firebird для MySQL запроса

SELECT PCODE,HISTNUM,FULLNAME FROM CLIENTS ORDER BY PCODE DESC LIMIT 10

будет:

SELECT FIRST 10 SKIP 0 PCODE,HISTNUM,FULLNAME FROM CLIENTS ORDER BY PCODE DESC

или:

SELECT PCODE,HISTNUM,FULLNAME FROM CLIENTS ORDER BY PCODE DESC ROWS 10
SELECT PCODE,HISTNUM,FULLNAME FROM CLIENTS ORDER BY PCODE DESC ROWS 1 TO 10

Firebird SELECT MAX CAST AS INT

Задача: нужно выбрать максимальное число из поля, формат которого текстовый.
При следующем запросе будет сделана выборка по алфавиту. т.е. будет выбрано, например, 999, когда присутствует значение 1000

SELECT MAX(HISTNUM) FROM CLIENTS

Обычно это решается так:

SELECT MAX(CAST(HISTNUM AS INT)) FROM CLIENTS

но в Firebird следующая ошибка:

conversion error from string ""
GDSCODE = 335544334
SQLCODE = -413

Решение: отсортировать вначале по длине строки, затем по алфавиту, выбрав одну строку. Варианты:

SELECT HISTNUM FROM CLIENTS ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC ROWS 1
SELECT HISTNUM FROM CLIENTS ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC ROWS 1 TO 1
SELECT FIRST 1 SKIP 0 HISTNUM FROM CLIENTS ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC

В конкретном случае нужно было еще сделать проверку на максимальную длину этого числа. Варианты:

SELECT HISTNUM FROM CLIENTS WHERE CHAR_LENGTH(HISTNUM)<7 ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC ROWS 1
SELECT FIRST 1 SKIP 0 HISTNUM FROM CLIENTS WHERE CHAR_LENGTH(HISTNUM)<7 ORDER BY CHAR_LENGTH(HISTNUM) DESC, HISTNUM DESC

SELinux enable mysql remote access — разрешить удаленный доступ к mysql

setsebool -P httpd_can_network_connect_db 1

To check SELinux

sestatus

To see what flags are set on httpd processes

getsebool -a | grep httpd

To allow Apache to connect to remote database through SELinux

setsebool httpd_can_network_connect_db 1

Use -P option makes the change permanent. Without this option, the boolean would be reset to 0 at reboot.

setsebool -P httpd_can_network_connect_db 1