php

php optimization 소고

가끔 작성한 코드의 성능과 메모리 사용량의 이유로 최적화를 한다. php도 마찬가지인데 최적화를 어디까지 해야하는지 선을 정하는 게 좋을 듯 하다. 서핑하다 비슷한 글을 발견했는데(http://xoa.petdance.com/Rules_of_Optimization_Club) 확실하고 상식적인 선이 아닌 최적화는 나중에 화를 불러올 수 있다고 생각한다. php가 함수 호출할 때 넘기는 Call by value parameter에 copy-on-write가 지원되기 전에는 성능을 위해 reference로 넘기던 때도 있었는데 근래에는 오히려 php의 자체 최적화에 방해가 되기도 한단다. 얼마 전 변수에 문자열을 계속 덧 붙이는게 성능상 문제가 있는 것(지속적인 메모리 realloc)을 확인하고 한 번에 큰 문..

php 5.5.13 + opcache = segment fault

아마 아래 버그인 듯.. 5.5.7 이상부터 문제가 있다고 한다.https://bugs.php.net/bug.php?id=66460 해결법은 버그 코멘트에도 언급되어 있는데 일단 php 5.5.6의 opcache를 사용하면 문제 없는 걸 확인했다. 다음은 http://duntuk.com/enable-zend-opcache-php-55-or-install-zendopcache-php-53-or-php-54 에서 발췌/일부 변경.wget http://us1.php.net/get/php-5.5.6.tar.gz/from/this/mirrortar xvfz php-5.5.6.tar.gzcd php-5.5.6/ext/opcache/phpize./configure --with-php-config=/usr/local/..

php 5.3 closure 오류 - function () use (reference 변수)

php 5.3.2 expected: ABC abc actual: ABC ABC 원인은 closure의 use 때문인데 추측하기로는 use를 위해 $x 값을 holding해 두는게 아닌가 한다. 회피 방법 1) closure를 대입문 아래로 이동function test(&$x) { $x = strtolower($x); $func = function () use ($x) { }; } 회피 방법 2) use를 reference로 사용$func = function () use (&$x) { }; 아마 아래 버그인 것으로 보이는데 최신의 php에서는 정상적으로 처리된다. https://bugs.php.net/bug.php?id=50230

php openssl_csr_sign()의 days 문제

(php 5.3.2) 예제등에서는 기본적으로 365(1년)를 지정하는데 9490(28년)처럼 지정하게 되면 인증서 만료일이 과거가 되어 버린다. php 내부에서는 X509_gmtime_adj()를 호출하게 되고 unix epoch로 처리가 되는데 이게 2037년 까지만 표현할 수 있기 때문에 28년을 지정하면 2012 + 28 > 2037이 되어 과거로 돌아가 버린다.

php 5.3.2 + eAccelerator 0.9.6, var_dump($closure); => UNKNOWN:0

분명 closure를 정의했는데 var_dump()에 NULL로 나오기도 하고 UNKNOWN:0 으로 나오기도 한다. 같은 함수 안에서 정의한 어떤 closure는 정상이고 어떤 closure는 안 된다. $func = function () { ... do something ... };var_dump($func); // NULL eAccelerator 0.9.6.1로 해결. 관련 링크: No closure support in PHP 5.3.2-1ubuntu4.2

php 4 + pecl ssh2 0.11.2 = /ssh2.c:50: error: syntax error before numeric constant

php 5.3 에서는 ok. php 4 + ssh2 0.11.0 도 ok. php 4 + ssh2 0.11.2 에서 우선 컴파일이 되게 하려고 0.11.0 의 코드를 참조해 다음처럼 수정했다. 동작에 어떤 영향을 미치는지 등은 아직 확인 못 했다. --- ssh2-0.11.2/ssh2.c 2010-11-04 07:24:33.000000000 +0900 +++ ssh2-0.11.2-new/ssh2.c 2011-06-07 23:16:18.000000000 +0900 @@ -47,9 +47,14 @@ int le_ssh2_pkey_subsys; #endif +#ifdef ZEND_ENGINE_2 ZEND_BEGIN_ARG_INFO(php_ssh2_first_arg_force_ref, 0) ZEND_ARG_PA..

ie8 + php session_start()시 session locking으로 hang 발생

특이 상황 발생. browser: ie8 apache 1.3.x php 4.3.9 CentOS 4.7 이 환경에서 navigation 도중 hang 발생. 조사해보니 hang 발생 지점은 session_start(). php가 session_start()를 할 때 마다 flock()으로 locking을 한다는 것을 확인했다. lsof를 해 보니 서비스중인(established) http process 외에 2개의 http process가 세션 파일을 사용중인 것으로 나온다. 결국 locking을 하지 않는 사용자 정의 session handler를 사용하도록 수정하고서야 해결되었다. 원인은 역시 불명. OTL 참고: http://ajaxian.com/archives/troubles-with-asynchr..

nobody2
'php' 태그의 글 목록