라즈베리파이 배포판 업그레이드 (jessie -> stretch)

라즈베리파이에 워드프레스를 설치하여 이 페이지를 운용중이다. 언제부터인가 워드프레스를 업데이트 하려면 php 버전 7 이상이 필요하다며 업데이트가 안되었다. 시간이 좀 있어서 php7을 설치해보기로 했다.

좀 검색을 해보니 지금 사용하는 jessie 배포판은 좀 오래된 버전으로 php5를 포함하고있다. 최신판인 stretch를 설치하면 php7을 포함하므로 자연스럽게 업그레이드가 될 것 같아서 배포판 업그레이드를 하기로 결정했다.

Raspberry Pi - Raspbian-Update "Jessie" to "Stretch"
Upgrade Raspbian “Stretch”

배포판 업그레이드는 https://www.datenreise.de/en/raspberry-pi-raspbian-update-update-jessie-to-stretch/ 페이지를 보면서 따라가면 별 문제 없이 할 수 있다. 몇 가지 패키지에 문제가 있었는데 사용하지 않는 패키지라 지워버리고 진행하니 문제가 없었다.

배포판 업그레이드 후 첫 번째 문제는 php5가 남아있다는 것이다. phpinfo를 보니 php5가 출력이 되었다. php5를 지우고 php7관련 패키지들을 다시 설치하여 php7으로 넘어갈 수 있었다. php7.0-pdm 패키지가 설치되면서 mysql, apache등이 연동이 되었던 것 같다.

이렇게 php7이 설치되니까 워드프레스도 자연스럽게 업데이트가 되어 잘 동작했다.

그런데 따로 만들어둔 페이지들이 하나도 동작하지 않았다. 좀 찾아보니 mysql_* 함수들을 mysqli_* 함수들로 변경해야 한다고. 그래서 일일이 찾아서 바꿔주니 에러는 나지 않았는데 쿼리 결과가 NULL이 리턴되었다. mysqli_query 함수를 찾아보니 mysqli 인자를 필수로 넘겨줘야 하는 것 같았다. mysqli_query($query) -> mysqli_query($conn, $query)로 변경해주니 쿼리 결과가 제대로 넘어왔다.

이걸 일일이 다 바꿔주는 방법밖에 없는건지 모르겠지만 일단 급하니 하나하나 바꿔줘야 할 듯… 여튼 라즈베리파이의 배포판을 업그레이드하였으니 큰 일 하나 해낸 듯.. 🙂

PHP에서 HTML DOM 파싱

PHP 내부에서 특정 web page를 읽어서 뭔가를 처리하는 일을 할 때 사용하는 방법이다. 기존에는 나름대로 string 파싱을 해서 사용했는데, 성능도 안 나오고 불편하여 JQuery 처럼 사용할 수 있는 방법을 찾아봤더니, 뜻이 있는 길에 길이 있다고.. 누군가 이미 잘 만들어 놓은 라이브러리가 있었다.

이름하여 simple_html_dom.php 라는 파일이다. (http://simplehtmldom.sourceforge.net/) 이 파일 하나만 include하여 사용하면 간단하게 dom 구조를 읽을 수 있다.

사용 방법은 다음과 같다.

// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
       echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>';

$array = $html->find(“div div table tr td”); 식의 찾기가 가능하며, 찾은 결과를 array로 리턴해준다. 위 예제와 같이 foreach로 전체 탐색을 하면서 주로 사용하면 되고, $array[0] 식의 접근도 물론 가능하다.

간단하게 페이지를 파싱할 수 있으니 너무 좋은 것 같다. 🙂