뜬금없이 array_filter의 사용법을 게다가 PHP의 사용법을 정리하는 이유는 PHP 특성상의 문제로 약간 의도와 다르게 동작하는 것이 있어서다. $values = ['a','b','c','d']; echo json_encode( array_filter($values, function($value) { return $value != 'b'; }) ); 내가 하고 싶었던 일은 단순히 array에서 특정값을 제외하기를 원했다. foreach를 돌려서 빼내도 되지만 가급적 미리 제공되는 함수를 써보려고 했다. 예상한 결과는 당연하게도 ['a','c','d'] 다. 그런데 결과는 어떻게 나왔을까? {"0":"a","2":"c","3":"d"} 이런 결과가 나오는 이유는 PHP에서 array는 object이..
회사에서 사정상 php를 메인개발언어로 사용하고 있다. 처음엔 익숙하게 사용하던 Apache friends의 XAMPP를 사용했었는데 docker 능력자가 나타나서 모든 것을 docker로 바꿔주었다. 첨엔 어리둥절했지만 사용하면 사용할 수록 docker가 참 좋다. docker허브에 등록된 php docker 같은 것을 사용하면 간단하게 php 웹서버를 돌려볼수도 있다. 물론 옵션을 조정하기 시작하면 직접 docker를 등록하기도 하고 해야하는데 어쨌든 머신이 바뀔때마다 새로 서버환경을 세팅할 필요가 없어서 참 좋다. 에디터에도 많은 변화가 있었다. 특출난 php 에디터가 없어서 sublime text, atom, emacs 같은 에디터를 사용했는데 PHPStorm의 존재를 알았다. 구매해야하긴 하는데..
작업 중인 php 서비스의 서버는 php 5.3을 사용한다. 그리고 나는 5.6을 사용한다. 이로 인해서 개발 과정에서는 겪지 못한 문제를 배포 후에 겪었고 이를 몇가지 정리하려고 한다. constructor namespace를 사용할 경우 constructor를 class명으로 사용할 수 없다. 다음의 코드는 둘 다 같은 결과를 얻을 것이라 기대하지만 test1쪽은 아무것도 출력하지 않는다. // Test/App.php namespace Test; class App { function App() { echo "hello\n"; } } // class_test1.php use Test; new App(); // class_test2.php class Test { function Test() { echo ..
헐랭이와 IT보안 블로그는 RSS에 등록해두고 틈틈이 보고 있는데 오늘 눈이 번뜩 떠질만한 이야기가 올라왔습니다. GIF+PHP 해킹기법에 대한 소개인데 http://durl.kr/eju 에 자세한 내용이 있습니다. 뭐 간단한 예이지만 hack.gif.php 같이 이미지 업로드를 했다고 할때 이 파일이름 그대로를 저장하고 나중에 이미지를 불러올때 이런 식으로 사용하게 되면 해커가 삽입한 php 코드가 실행된다는 것입니다. 물론 맨 나중 확장자를 가져오도록 하면 되긴 하지만 그렇다고 문제가 완전히 해결되는 것은 아닙니다. 따라서 다음과 같은 방법을 사용하거나.. $file = 'image.gif.php'; Header('Content-Type: image/gif'); readfile('images/'.ba..