Programming/PHP2014. 5. 22. 16:49
SQL Server Native를 설치해서 사용했지만 아래 링크처럼 한글 및 기타 몇가지 문제가 있는듯하여서
FreeTDS로 사용하기로 했다..

Linux uninxODBC SQL Server Native Client 11.0 한글문제 - http://www.opens.kr/35


※ SQL Server Native bind 처리도 문제있는 듯하다 ㅠㅠ

http://hbs.pe.kr/50113950707

http://connect.microsoft.com/SQLServer/feedback/details/521409/odbc-client-mssql-does-not-work-with-bound-parameters-in-subquery

※ FreeTDS bindValue 쓰면 되는 것 처럼 보이는 데 

    실제 SQL Server Profiler 해보면 prepare statement bind 안되어서 들어온다ㅠㅠ;;


PHP5.3/5.4/5.5 Yum 설치 - http://www.opens.kr/33  으로 PHP 설치 사용했다면

그냥 yum install php55w-mssql 만 설치하면 자동으로 설치가 다 된다.


1) 설치

$ yum install php55w-mssql ================================================================================== Package Arch Version Repository Size ================================================================================== Installing: php55w-mssql x86_64 5.5.12-1.w6 Installing for dependencies: freetds x86_64 0.91-2.el6 php55w-pdo x86_64 5.5.12-1.w6 unixODBC x86_64 2.2.14-12.el6_3 Transaction Summary ================================================================================== Install 4 Package(s)


2) 접속 테스트 아래 링크에 tsql / isql 이용해서 하면된다.

리눅스 unixODBC FreeTDS 설치 (MSSQL) - http://www.opens.kr/36


3) 글로벌 설정

$ vi /etc/freetds.conf
------------------------
[global]
tds version = 8.0
client charset = UTF-8
text size = 64512
timeout = 10
connect timeout = 10
------------------------

※ TDS protocol 버전정보와 자세한 옵션 정보는 아래 freetds 사이트 가이드 참조하면 된다.

http://www.freetds.org/userguide/choosingtdsprotocol.htm

http://www.freetds.org/userguide/


4) PHP PDO에서 접속예시 

$dsn = 'dblib:host=192.168.0.0;dbname=DBNAME';
$user = "user_id";
$password = "user_password";

try {
    $dbh = new PDO($dsn, $user, $password); 
} catch (PDOException $e) {
    echo $e->getMessage();
}
$sQuery = "select * from sysobjects where xtype = 'U'";
$sth =  $dbh->prepare($sQuery);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($result);



Posted by 시니^^
Programming/PHP2014. 5. 22. 12:48

MSSQL에서 UTF-8 텍스트를 데이터를 넣을때 NVARCHAR타입으로 해서


INSERT INTO table ( text ) value ( N'한글테스트' ) 이런식으러 넣는 다


그런데 리눅스에서 PDO에서 uninxODBC SQL Server Native Client 11.0 넣으면 제대로 들어가지 않고 깨진다


그래서 아래 처럼  UTF-16LE로 변환해서 hexcode로 넣으니까 잘된다.. 

$sName = iconv('utf-8','UTF-16LE',$sName);
$sName = bin2hex($sName);
$sQuery = "INSERT INTO table (name) VALUES (  0x{$sName} )";

그리고 값을 가져올때 가끔식 일부데이터는 문제가 또 발생한다 ㅠㅠ


그래서 CAST 로 한번 변환해주니까 잘된다..

참가로 NVARCHAR(MAX)로 하니까 글이 전혀 나오지 않아서 그냥 NTEXT로 꽁수를 부렸다..

$sQuery = "SELECT CAST(name AS NTEXT) AS name FROM table ";

그리고 참고로 PHP5.3.3 버전에서 PDO ODBC nvarchar(max)데이터 어느 정도 이상되면 깨지는 현상이 나오는듯하다.


그래서 PHP5.5.12 / PHP5.4.28 / PHP5.3.28에서는 CAST해서 하면 큰 문제가 없다.


아무튼 Linux uninxODBC SQL Server Native Client 11.0 이래저래 문제가 좀 있는듯하다.


그래서 개인적으로는 Linux에서 MSSQL 연결하는 경우 SQL Server Native Client 보다는 FreeTDS를 사용을 권하고 싶다.


Posted by 시니^^
Programming/PHP2014. 5. 21. 17:33

PHP Yum 설치  http://webtatic.com/

 

버젼별 설치 방법

http://webtatic.com/packages/php53/

http://webtatic.com/packages/php54/

http://webtatic.com/packages/php55/

http://webtatic.com/packages/php56/

 

1)  저장소 등록( PHP5.5기준 / Centos6 )

$ rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

$ ll /etc/yum.repos.d

-rw-r--r--  1 root root  888 Jul  8  2013 webtatic-archive.repo
-rw-r--r--  1 root root  790 Jul  8  2013 webtatic.repo
-rw-r--r--  1 root root  888 Jul  8  2013 webtatic-testing.repo

2) php패키지 확인

$ yum search php55w

3) PHP 설치

$ yum install php55w php55w-fpm php55w-mysqlnd php55w-odbc php55w-opcache php55w-pdo php55w-mcrypt php55w-mbstring

$ php -v
PHP 5.5.12 (cli) (built: May  1 2014 20:34:46)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

 

4) 웹서버에 PHP 적용

Apache : httpd.conf 에 PHP Module 추가

Nginx : php-fpm (/etc/init.d/php-fpm start) 실행 후  conf.d의 conf파일에 FastCGI server listening 설정

 

 

PHP 소스설치

1) 파일 다운로드

    http://www.php.net/downloads.php

2) php net에 웹서버별 메뉴얼 참조

    http://www.php.net/manual/en/install.unix.php

 

3) 필요한 라이브러리 경우 각 라이브러리 메뉴얼 참조해서 컴파일 옵션에 추가

예시) pdo  odbc의 경우 http://us.php.net/manual/en/ref.pdo-odbc.php 

./configure --with-pdo-odbc=unixODBC,/usr/local
위와 같이 unixODBC librarie 경로 지정 해줘야됨 yum으로 보통 /usr/lib or /usr/lib64이므로 아래와 같이하면됨
./configure --with-pdo-odbc=unixODBC,/usr

기타 기본 탑재 라이브러리는 --enable-mbstring --enable-fpm 형태로 적용하면됨

 

 

Posted by 시니^^
Programming/PHP2014. 4. 22. 21:35

작년에 보고 관심을 가지고 있었는데...4월 9일날 행사를 했나부다...


Hack Developer Day: April 9, 2014




ZDNet 뉴스자료

http://www.zdnet.co.kr/news/news_view.asp?artice_id=20140421154042&type=xml

 

HHVM : http://hhvm.com/

HackLanguage  http://hacklang.org/

HHVM and Hack Manual : http://docs.hhvm.com/manual/en/index.php


생활 코딩 동영상 설치 강좌!!

http://opentutorials.org/course/692/4542


현재 테스트 되고 있는 오픈소스 리스트  

http://hhvm.com/frameworks/

21개 Frameworks at 100%되었다고함


보니까 codeigniter,laravel,slim 100%로 되어있네요.. 오호~!!


yii는 아직 99.8%로 흠흠....... 아무쪼록 우리나라는 너무 JAVA가 너무 강해서 ㅠㅠ


나도 어쩔 수 없이 JAVA를 요즘 공부하고 있긴하지만........


아무쪼록 PHP가 좀 더 강세를 보일 수 있길 바라며!!!.....

=======================================================================================================


참고로 동영상 youtube 사이트에서 보면 영어 자동자막가능!! 와 좋다!!!...........

그래도 난 어쩔수없이 번역기 돌리면서 봐야되지만 ㅠㅠ...

http://www.youtube.com/watch?v=bjWanTsG22c&list=PLb0IAmt7-GS2fdbb1vVdP8Z8zx1l2L8YS




Posted by 시니^^
Programming/PHP2013. 2. 22. 01:35

1. vi test.sh 에러발생할수있는 쉘스크립트작성

#!/bin/bash
ssssssssss

2. 실행시 에러가 발생함

-------------------------------------------

[root@test]$ /bin/bash test.sh

test.sh: line 3: ssssssssss: command not found
-------------------------------------------
3. PHP에서 exec 실행시 에러 감시 불가
$outmsg = exec('/bin/bash test.sh');
echo $outmsg;
exit;
4. 2>&1 이용한 표준 출력의 전달되는 곳으로 표준에러를 전달
--------------------------------------------
 
2>&1의 의미는 표준 출력의 전달되는 곳으로 표준에러를 전달하라는 의미
0, 1, 2는 각각 표준입력, 표준출력, 표준에러를 의미
--------------------------------------------
$outmsg = exec("/bin/bash test.sh 2>&1", $out, $err);
var_dump($out);
var_dump($err);
exit;
--결과물------------------------------------

array(2) {

  [0]=>  string(3) "111"

  [1]=>  string(46) "test.sh: line 3: ssssssssss: command not found"

}

int(127)

--------------------------------------------


5.  proc_open 사용

$sDesc = array(
        0 => array("pipe", "r"),  // stdin
        1 => array("pipe", "w"),  // stdout
        2 => array("pipe", "w")   //stderr
);
$oProcess = proc_open('/bin/bash test.sh', $sDesc, $aPipes, dirname(__FILE__), null);
if ( is_resource($oProcess) ) {
    $sStdout = stream_get_contents($aPipes[1]);
    $sStderr = stream_get_contents($aPipes[2]);
    fclose($aPipes[1]);
    fclose($aPipes[2]);
    echo 'stdout : '.$sStdout;
    echo 'stderr : '.$sStderr;
    proc_close($oProcess);
} else {
    exit('ERROR');
}

--결과물------------------------------------

stdout : 

stderr : /bin/bash: test.sh: No such file or directory 

--------------------------------------------


참고사이트

http://stackoverflow.com/questions/2320608/php-stderr-after-exec

http://kr.php.net/manual/en/function.proc-open.php 


Posted by 시니^^
Programming/PHP2013. 2. 22. 01:06

수정 작업을 해야되서 페이지 따로 구성해서 작업하는데..

기존 PHP소스에서 잘되던 exec명령어가 안된다......

-------------------------------------------

Warning: exec() has been disabled for security reasons....

-------------------------------------------


위의 에러의 경우 아래의 설정으로 기본적으로 해결된다....

-------------------------------------------

http://www.php.net/manual/kr/ini.sect.safe-mode.php

safe_mode boolean

PHP의 안전 모드 활성화 여부. PHP가 --enable-safe-mode로 컴파일 되면 기본값 On, 아니면 Off.

safe_mode_exec_dir string

PHP가 안전 모드를 사용중이라면, system()과 그 외의 시스템 프로그램을 실행하는 함수는 이 디렉토리에 있지 않으면 프로그램 시작이 거부된다. 윈도우를 포함한 모든 환경에서 디렉토리 구분은 /를 이용해야 합니다.


http://www.php.net/manual/kr/ini.core.php#ini.disable-functions

disable_function 설정

-------------------------------------------


하지만 php.ini아무리 봐도 답이 없음....

확인 결과 해당서버에 뭔가 깔려있다.......

-------------------------------------------

PHP 5.1.6 (cli) 

Copyright (c) 1997-2006 The PHP Group

Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

    with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies

    with Suhosin v0.9.29, Copyright (c) 2007, by SektionEins GmbH

    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

-------------------------------------------

 


수호신(Suhosin) 설치되어있듬(수호신에 대해서 자세한 내용은 다음에 기회있을때 다시...)

우선 아래 실행해보면


if (extension_loaded('suhosin')) {
        $suhosin = @ini_get("suhosin.executor.func.blacklist");
        print_r($suhosin);
}
-------------------------------------------

[root@test]$ php test.php 

system,passthru,shell_exec,exec,show_source,popen,allow_url_fopen,proc_open

-------------------------------------------


시스템 명령어 막아 놓음......

그리고 vhost에서.....

특정 디렉토리만 해당 수호신에 해당 옵션을 별도록 설정 

-------------------------------------------

<Directory ?????/www/???>

php_admin_value suhosin.executor.func.blacklist system,passthru,shell_exec,show_source,popen,allow_url_fopen,popen,proc_open

</Directory>

-------------------------------------------


vhost php_admin_value에 exec가 빠져있기 때문에 허용 되었던 것임....

안되는 원인 찾는다고 계속 삽질했네 휴.....

ㅠ_________ㅠ;;



Posted by 시니^^