쉘스크립트에서 웹서버 권한으로 php 파일 실행하기

쉘스크립트에서 아래와 같은 방법으로 php 파일을 실행하면 접속한 사용자 권한으로 실행이 되기 때문에 권한 문제 등 다양한 문제가 생길 수  있다. cron 을 이용해 실행하는 경우 root 권한이기 때문에 권한 문제는 발생하지 않지만 php 파일 실행으로 생성되는 파일 등의 소유권이 root 로 되기 때문에 웹서버에서 접근할 수 있는 문제가 발생할 수도 있다.

웹서버 권한으로 php 파일을 실행하기 위해서는 위의 스크립트를 아래와 같이 수정한다.

위 코드는 쉘스크립트 파일(예 sitemap.sh) 의 절대 경로를 구하고 해당 디렉토리로 이동 후 php 파일을 웹서버 권한(www-data)으로 실행한다. sitemap.sh 파일과 sitemap.php 파일은 동일 경로에 있어야 한다. 디렉토리를 이동하는 것은 php 파일의 코드에서 사용하는 경로 등을 cron 실행에 맞게 수정하지 않기 위함이다.

sudo 명령어 때문에 추가적인 설정이 필요한데 sudo 명령을 실행하면 사용자 패스워드를 요청하기 때문이다. 우분투의 경우 visudo 명령을 통해 아래와 같은 설정을 추가해야 한다.

위에서 username 은 실제 사용자로 변경한다. sitemap.sh 파일을 crontab 에 등록해서 자동실행되도록 한다.

[PHP] 업로드된 이미지로 파비콘(favicon) 생성하기

공개된 PHP Class를 이용해 업로드된 이미지로 부터 파비콘을 생성하는 방법이다. 사용된 PHP Class는 https://github.com/chrisbliss18/php-ico 이다.

우선 이미지 파일 업로드를 위한 폼을 코딩한다.

업로드 파일로 부터 파비콘을 생성하는 faviconCreate.php 파일의 코드는 다음과 같다.

위 코드는 32×32, 180×180, 192×192, 270×270 사이즈의 파비콘을 생성해서 favicon.ico 파일을 생성하는 코드이다.  class-php-ico.php 파일의 경로는 상황에 맞게 수정한다. 생성된 파비콘을 웹페이지에서 출력하기 위해서는 아래와 같이 코드를 추가해야 한다.

파비콘 출력 코드는 <link href="http://example.com/favicon/favicon.ico" rel="shortcut icon"> 이다.

WordPress 에 Redis Cache 적용하기

좀 더 빠른 속도를 위해 워드프레스에 Redis 캐시를 적용했다. 적용 결과는 일단 만족스럽다. 구글 페이지스피드 분석 도구에서도 이전 보다는 좋은 점수가 나오는데.. 이 정도면 만족스러운 결과가 아닌가 싶기도 하다. Redis 캐시를 적용하기 위해서는 Redis 를 서버에 설치해야 한다. 아래는 우분투 16.04 기준으로 Redis 서버 패키지를 설치하는 것이다.

다음으로 PHP 에서 Redis 서버에 접근하기 위해 php-redis 패키지를 설치한다.

Redis 서버를 실행한다.

다음으로 wp-config.php 파일에 아래 설정을 추가한다.

SALT 부분의 값은 사이트 도메인 등으로 변경해 준다. 이 과정을 하지 않으면 하나의 서버에서 여러 개의 워드프레스를 운영하는 경우 뜻하지 않는 오류를 경험할 수 있다.

이제 워드프레스에서 Redis 캐시 사용을 위한 플러그인을 설치한다. 플러그인은 https://wordpress.org/plugins/redis-cache/ 이다. 플러그인 설치 후 아래와 같이 Enable Object Cache 버튼을 클릭해 Objec Cache 를 활성화 한다.

[jQuery] required 속성을 이용한 필수 입력 체크 스크립트

웹 프로그램에서 가장 많이 사용하는 스크립트가 form에서 필수 입력 부분을 체크하는 스크립트일 것이다. 아래 코드는 input 등에 지정된 required 속성을 이용해서 필수 입력을 체크하는 것이다.

스크립트가 실행되면 입력 값이 없는 input 등에 대응되는 label 의 텍스트를 가져와서 이름 필수 입력입니다. 와 같은 형태로 경고창을 표시한다.

[PHP] 두 날짜 사이의 차이 구하기

두 개 일시의 차이를 구하는 함수이다.

위 함수를 이용해 날짜 차이를 구하는 코드는 아래와 같다.

위 코드의 결과는 아래와 같이 표시된다.

 

참고 : http://php.net/manual/en/datetime.diff.php