Kullanıcı bazlı web dizinleri için gerekli Apache yapılandırması (apache configuration for per user web directories)

/home/{USER}/public_html gibi kullanıcıların kendi home altındaki web dizinlerinden yayın yapabilmek için gerekli ayarları anlatılacaktır.

Apache userdir modülü aktif edilmeli ve Apache yeniden başlatılmalı:

sudo a2enmod userdir

Debian dağıtımlarında kullanıcı dizinlerinden PHP betikleri servis etmek varsayılan olarak kapalı gelmektedir. Bunu aktif etmek için /etc/apache2/mods-enabled/php5.conf  dosyasında aşağıdaki satırları aşağıdaki gibi yorum satırı olarak işaretlemeliyiz:

#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
#</IfModule>

Son olarak apache’yi yeniden başlatıyoruz

sudo service apache2 restart

 

Bu şekilde her kullanıcı /home/{USER}/public_html/ altından yayın yapabilir ve şu şekilde erişilebilir localhost/~{USER}

public_html yerine başka dizin ayarlama

Eğer public_html değil de başka bir dizin adı kullanılmak isteniyorsa /etc/apache2/conf.d/ altında per-user-web-dir.conf adında bir dosya açalım ve içine istediğimiz dizin adını girelim:

UserDir www

Şimdi Apache’yi yeniden başlatın ve /home/{USER}/www web dizininiz localhost/~{USER} şeklinde rişilebilir olmalı.

CLI’dan Ofis Belgelerini PDF’e Dönüştürme (how to convert office files to pdf)

Dönüştürme işlemleri için Centos üzerinde libreoffice kullanılacaktır.

Kurulum

$ yum install libreoffice-headless libreoffice-writer libreoffice-calc libreoffice-impress

Kullanımı

$ libreoffice --headless --convert-to pdf mydocument.odt

*** Çevrilecek dosyalar kesinlikle belirtilen dosya uzantılarını dosya adında içermeli.

PDF’ler de  plain text’e aşağıdaki şekilde çevrilebilir:

$ pdftotext mydocument.pdf mydocument.txt

Desteklenen Dosya Tipleri

array(
        // Mix. file types
        array('mimeType'=>'text/plain','extension'=>'txt'),
        array('mimeType'=>'application/rtf','extension'=>'rtf'),
        array('mimeType'=>'application/vnd.wordperfect','extension'=>'wpd'),
        array('mimeType'=>'text/csv','extension'=>'csv'),
        array('mimeType'=>'text/tab-separated-values','extension'=>'tsv'),
        // Microsoft office file types
        array('mimeType'=>'application/msword','extension'=>'doc'),
        array('mimeType'=>'application/msword','extension'=>'dot'),
        array('mimeType'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document','extension'=>'docx'),
        array('mimeType'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.template','extension'=>'dotx'),
        array('mimeType'=>'application/vnd.ms-word.document.macroEnabled.12','extension'=>'docm'),
        array('mimeType'=>'application/vnd.ms-word.template.macroEnabled.12','extension'=>'dotm'),
        array('mimeType'=>'application/vnd.ms-excel','extension'=>'xls'),
        array('mimeType'=>'application/vnd.ms-excel','extension'=>'xlt'),
        array('mimeType'=>'application/vnd.ms-excel','extension'=>'xla'),
        array('mimeType'=>'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','extension'=>'xlsx'),
        array('mimeType'=>'application/vnd.openxmlformats-officedocument.spreadsheetml.template','extension'=>'xltx'),
        array('mimeType'=>'application/vnd.ms-excel.sheet.macroEnabled.12','extension'=>'xlsm'),
        array('mimeType'=>'application/vnd.ms-excel.template.macroEnabled.12','extension'=>'xltm'),
        array('mimeType'=>'application/vnd.ms-excel.addin.macroEnabled.12','extension'=>'xlam'),
        array('mimeType'=>'application/vnd.ms-excel.sheet.binary.macroEnabled.12','extension'=>'xlsb'),
        array('mimeType'=>'application/vnd.ms-powerpoint','extension'=>'ppt'),
        array('mimeType'=>'application/vnd.ms-powerpoint','extension'=>'pot'),
        array('mimeType'=>'application/vnd.ms-powerpoint','extension'=>'pps'),
        array('mimeType'=>'application/vnd.ms-powerpoint','extension'=>'ppa'),
        array('mimeType'=>'application/vnd.openxmlformats-officedocument.presentationml.presentation','extension'=>'pptx'),
        array('mimeType'=>'application/vnd.openxmlformats-officedocument.presentationml.template','extension'=>'potx'),
        array('mimeType'=>'application/vnd.openxmlformats-officedocument.presentationml.slideshow','extension'=>'ppsx'),
        array('mimeType'=>'application/vnd.ms-powerpoint.addin.macroEnabled.12','extension'=>'ppam'),
        array('mimeType'=>'application/vnd.ms-powerpoint.presentation.macroEnabled.12','extension'=>'pptm'),
        array('mimeType'=>'application/vnd.ms-powerpoint.template.macroEnabled.12','extension'=>'potm'),
        array('mimeType'=>'application/vnd.ms-powerpoint.slideshow.macroEnabled.12','extension'=>'ppsm'),
        // Open office file types
        array('mimeType'=>'application/vnd.oasis.opendocument.text','extension'=>'odt'),
        array('mimeType'=>'application/vnd.oasis.opendocument.spreadsheet','extension'=>'ods'),
        array('mimeType'=>'application/vnd.sun.xml.calc','extension'=>'sxc','convertTo'=>'txt'),
        array('mimeType'=>'application/vnd.oasis.opendocument.presentation','extension'=>'odp'),
        array('mimeType'=>'application/vnd.sun.xml.writer','extension'=>'swx'),
        array('mimeType'=>'application/vnd.sun.xml.impress','extension'=>'sxi'),
);

Yii: Eksik Tercüme Mesajlarını Tespit Eden Betik (how to detect missing translation messages)

Nedir?

Bu betik, Yii framework ile geliştirilmiş projelerde, belli dile ait eksik tercüme mesajlarını tespit eder ve eksik olanları @@@ olarak işaretler.

Parametreler

Parametre
Zorunlu mu?
Örnek
Açıklama
yii-msg-dir-path Evet –yii-msg-dir-path=”/var/www/html/panel/protected/messages” Projede “messages” dizin yolu
correct-lang-dir-name Evet –correct-lang-dir-name=”tr” Tam tercüme mesajlarını içeren dilin dizin adı
missing-lang-dir-name Evet –missing-lang-dir-name=”de” Eksik tercüme mesajlarını içeren dilin dizin adı
overwrite Hayır –overwrite

Eksik tercüme mesajları içeren dosyanın üzerine yazmasını sağlar

*** varsayılanda üzerine yazmaz; .new uzantılı dosyaya yazar

 

Örnek Kullanım

$ php missing-yii-translation-detector.php --yii-msg-dir-path="/var/www/html/panel/protected/messages" --correct-lang-dir-name="tr" --missing-lang-dir-name="de" --overwrite

Betik Dosyasını İndir

İndir: missing-yii-translation-detector.php

Betik Kodları

<?php

/**
 * Detects missing Yii translation messages based on language.
 *
 * - Needs write permission for apache to create target language-spec. directory OR
 * 	create yourself.
 *
 * @author Erman Gülhan
 * @date 2014-06-03
 */

$args=getopt('',array('yii-msg-dir-path:','correct-lang-dir-name:','missing-lang-dir-name:','overwrite'));

if(empty($args['yii-msg-dir-path']) || empty($args['correct-lang-dir-name']) || empty($args['missing-lang-dir-name']))
	showUsage();

$yiiMsgsDir=$args['yii-msg-dir-path'];
$correctLangDir=$args['correct-lang-dir-name'];
$missingLangDir=$args['missing-lang-dir-name'];
$overwrite=isset($args['overwrite']) ? true : false;
$targetFileSuffix='new';

$msgLinePatt="/^\s*['\"](.*)['\"]\s*=>/";
$_sourceDir=$yiiMsgsDir.'/'.$correctLangDir;
$_targetDir=$yiiMsgsDir.'/'.$missingLangDir;

// Needs write permission for apache
if(!file_exists($_targetDir))
	mkdir($_targetDir);

foreach(glob($_sourceDir.'/*.php') as $file)
{
	$curFileName=pathinfo($file);
	$curFileName=$curFileName['basename'];
	$_targetFile=$_targetDir.'/'.$curFileName;
	$isExist=file_exists($_targetFile);
	$_targetMsgArr=$isExist ? include($_targetFile) : array();
	$handle=fopen($file,'r');
	$targetFileContent='';
	while(($line=fgets($handle,4096))!==false)
	{
		if(preg_match($msgLinePatt,$line,$m))
		{
			$msgKey=$m[1];
			$targetContent=array_key_exists($msgKey,$_targetMsgArr)
				? "'$msgKey'=>'".$_targetMsgArr[$msgKey]."',"
				: "'$msgKey'=>'@@@',";
			$targetContent="\t".$targetContent.PHP_EOL;
		}
		else
			$targetContent=$line;

		$targetFileContent.=$targetContent;
	}

	$newFile=$isExist && !$overwrite ? $_targetFile.'.'.$targetFileSuffix : $_targetFile;
	file_put_contents($newFile,$targetFileContent);
}


function showUsage()
{
	echo PHP_EOL.'USAGE: '.PHP_EOL;
	echo basename(__FILE__).' --yii-msg-dir-path="/var/www/html/panel/protected/messages" --correct-lang-dir-name="tr" --missing-lang-dir-name="de" --overwrite'.PHP_EOL.PHP_EOL;
	echo '*** overwrite parameter is optional.'.PHP_EOL.PHP_EOL;
	exit;
}

?>

MySQL varsayılan karakter setini utf-8 ayarlama (how to set MySQL default character set to utf-8)

Veritabanına özel ayarlama

CREATE DATABASE mydb
 DEFAULT CHARACTER SET utf8
 DEFAULT COLLATE utf8_general_ci;

Sunucu açılışında belirleme

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

MySQL yapılandırma zamanında belirleme

shell> ./configure --with-charset=utf8 --with-collation=utf8_general_ci

NOTLAR

HTML

HTML tarafında utf-8 desteği için:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />