@charset 'EUC-KR';
body {
color:#333;
}
<script type="text/javascript" src="script.js" charset="EUC-KR"></script>
@charset 'EUC-KR';
body {
color:#333;
}
<script type="text/javascript" src="script.js" charset="EUC-KR"></script>
ffmpeg-php 함수를 이용해 썸네일을 추출할 때 발생할 수 있는 오류 입니다.
일단 기본적으로 아래 환경이 설정되어져 있어야 합니다.
php.ini
ffmpeg
ffmpeg-php version 0.6.0-svn
ffmpeg-php built on Jul 16 2009 10:12:33
ffmpeg-php gd support enabled
ffmpeg libavcodec version Lavc1d.51.38.0
ffmpeg libavformat version Lavf1d.51.10.0
ffmpeg swscaler diabled
gd
GD Support enbled
GD Version 2.0 or higher
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.3.5
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
ffmpeg_frame() 클래스의 toGDImage() 를 이용해 GDImage를 생성하면,
failed to convert frame to gd image
에러로 생성할 수 없습니다.
이 문제는 0.5.3 이하 버전에서는 문제가 없었던 것 같습니다.
ffmpeg-php-0.6.0 으로 업그레이드 되면서 몇가지 문제들이 발생하네요.
(resize(), crop() 함수는 0.6.0 버젼에서 제외되었습니다. : http://ffmpeg-php.svn.sourceforge.net/viewvc/ffmpeg-php/trunk/ffmpeg-php/ChangeLog?view=markup)
원인은 ffmpeg_frame.c 파일의 버그였습니다.
(http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=496079)
ffmpeg-php-0.6.0.tar.bz2 파일의 압축을 풀고
ffmpeg-php.c 파일을 수정합니다.
ffmpeg_frame.c (수정 전)
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
if (gdImageBoundsSafeMacro(dest, x, y)) {
// copy pixel to gdimage buffer zeroing the alpha channel
dest->tpixels[y][x] = src[x] & 0x00ffffff;
} else {
return -1;
}
}
src += width;
}
ffmpeg_frame.c (수정 후)
if(width > dest->sx || height > dest->sy){
return -1;
}
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
// copy pixel to gdimage buffer zeroing the alpha channel
dest->tpixels[y][x] = src[x] & 0x00ffffff;
}
src += width;
}
수정 후 설치하면, 문제가 해결됩니다..^^
프로젝트를 진행하면서 각 개발자의 계정(도메인)정보를 config 파일에 기록하여 각각 관리하는데,
CakePHP에서는 APP디렉토리 마다 config/core.php 를 만들어서 필요한 파일을 기록하고 있습니다.
core.php
Configure::write(‘hosts’, array( 'WWW' => 'http://www.minseop.com', ));
문제가 된 부분은 Javascript 였습니다.
Javascript 에서도 이런 사용자별 호스트 정보를 이용할 경우가 있지요.
그냥 js 파일을 만들어서 기록하고,
layout 에 담아두면 문제는 없습니다.
하지만, 관리적인 면에서 비효율적이라는 생각이 들었습니다.
이를 해결하기 위해 PHP에서 이용할 수 있는 하나의 방법입니다.
index.php
<script type="text/javascript" src="/js/extend.php"></script>
extend.php
<?php
header('content-type:application/x-javascript');
$message = 'Javascript Test';
echo("document.write('{$message}')\n");
?>
이렇게 이용하면 외부 파일을 불러와서 이용하는 것이 가능해 집니다.
CakePHP에서 이 방식을 이용하면,
Configure Class를 이용하기 위해 너무 많은 라이브러리가 필요했습니다.
아니면, hosts Array 만 따로 파일을 만들어서 core.php와 extend.php에서 공동으로 이용할 수도 있습니다.
하지만 개별적으로 관리해야 하는 파일이 하나 추가되는 부분이 조금 걸리네요..^^;;
그래서, 다른 방법으로 Javascript를 위한 컨트롤러를 생성할 수 있습니다.
exjs_controller.php
<?php
class ExjsController extends AppController {
var $name = 'Exjs';
var $uses = null;
var $autoRender = false;
var $autoLayout = false;
function index() {
header('content-type:application/x-javascript');
$hosts = Configure::read('hosts');
foreach ($hosts as $k => $v) {
echo "var HOST_{$k} = '{$v}';\n";
}
}
}
?>
index.php
<script type="text/javascript" src="/exjs/"></script>
이런 방법으로 Javascript와 PHP에서 이용할 수 있는 config파일을 쉽게 관리할 수 있습니다.
또한, hosts 외에도 다른 설정 값을 이용할 수 있다는 장점도 있네요.^^
참조 :
ffmpeg-php-0.6.0 컴파일 중에 발생되는 에러입니다. (Ubuntu)
0.6.0 하위버전 에서도 같은 문제가 나타날 수 있으며 해결방법은 똑같습니다.
/usr/local/src/ffmpeg-php-0.5.3/ffmpeg_frame.c: In function ‘zif_toGDImage’:
/usr/local/src/ffmpeg-php-0.5.3/ffmpeg_frame.c:448: error: ‘PIX_FMT_RGBA32’ undeclared (first use in this function)
/usr/local/src/ffmpeg-php-0.5.3/ffmpeg_frame.c: In function ‘zif_ffmpeg_frame’:
/usr/local/src/ffmpeg-php-0.5.3/ffmpeg_frame.c:533: error: ‘PIX_FMT_RGBA32’ undeclared (first use in this function)
make: *** [ffmpeg_frame.lo] Error 1
ffmpeg-php 컴파일 시 PIX_FMT_RGBA32 에러 발생으로 컴파일이 안되면,
아래 명령을 실행합니다.
perl -i -p -e ’s/PIX_FMT_RGBA32/PIX_FMT_RGBA/g;’ ffmpeg_frame.c
다시 컴파일을 시도하면 문제가 해결됩니다…^^
출처 : http://blog.hostonnet.com/ffmpeg-php-error-pix_fmt_rgba32
vim scp://remoteuser@server.tld//path/to/document
호스트주소 뒤에 // 를 붙이면 절대 경로 파일에 접근도 가능합니다.
해당 호스트에 직접 접속해서 편집하는편이 가장 빠르지만,
가끔 참조나 복사를 간단하게 이용할 경우 유용하게 이용할 수 있습니다.
참조 :
http://vim.wikia.com/wiki/VimTip337
http://vim.wikia.com/wiki/Edit_remote_files_locally_via_SCP/RCP/FTP
trac-admin (프로젝트 저장소) (옵션) (추가옵션)
프로젝트 백업 : trac-admin /home/trac/malltb2 hotcopy /home/trac/opentb
Repository 가 변경되면,
resync 명령으로 저장소를 변경합니다.
(이걸 몰라서 cp –R 로 복사해버렸던..^^;;;;)
저장소 변경 : trac-admin /home/trac/opentb resync
1. 프로젝트 명을 지정하고,
2. 저장소를 선택하고,
3. repository 경로를 설정하면, 끝…^^
나머지 옵션들도 이런 식으로 사용하는 것 같습니다.
자세한 내용은 help…
trac-admin help
trac-admin help (옵션)
SQL 파일로 MySQL 데이터 Insert
$ mysql –h (호스트) –u (아이디) –p (패스워드) (데이터베이스) < (파일명)
Enter Password :
(우편번호 49988건을 일일이 손으로 할뻔했다…… ㅡㅡ;)
Shell 과 DB Table의 캐릭터형식이 다를 경우,
SET NAMES 를 이용해 쿼리 문자열을 설정해줍니다.
UTF-8 로 Shell에 접속한 후, sql 파일 상단에
SET NAMES euckr;
만 적어주면, EUC-KR로 Dump 됩니다.
참고로,
Table 복사는 복사할 테이블을 만들어주고, 기존 테이블에서 데이터를 복사합니다.
mysql> CREATE TABLE (사본테이블명) ………;
mysql> INSERT INTO (사본테이블명) SELECT * FROM (원본테이블명);
Subversion repository에 저장된 UTF-8 문자열을 받을때 현재 locale의 인코딩이 UTF-8이 적용되어 있어야 합니다.
예를들어, locale이 en_US로 설정되어 있으면 한국어로 커밋된 파일을 받을 수 없습니다.
현재 locale 확인
$ locale
LANG= LC_COLLATE="C" LC_CTYPE="C" LC_MESSAGES="C" LC_MONETARY="C" LC_NUMERIC="C" LC_TIME="C" LC_ALL="C/C/C/C/C/C"
사용중인 계정의 locale을 UTF-8로 변경 후 업데이트(또는 체크아웃)를 실행합니다.
참고
http://www.juretta.com/log/2007/05/09/svn_can_t_convert_string_from_utf-8_to_native_encoding_/
$ export LC_CTYPE=ko_KR.UTF-8
$ locale
LANG= LC_COLLATE="C" LC_CTYPE="ko_KR.UTF-8" LC_MESSAGES="C" LC_MONETARY="C" LC_NUMERIC="C" LC_TIME="C" LC_ALL="C/ko_KR.UTF-8/C/C/C/C"
export 를 이용하면 로그인 된 상태에서만 적용됩니다.
현재 계정에 로그인할 때마다 적용하려면
쉘 설정파일(.cshrc, .bash_profile)에 기록합니다.
csh
setenv LANG ko_KR.UTF-8
setenv LC_ALL ko_KR.UTF-8
bash
export LANG=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8
참조
locale 을 UTF-8 로 변경하려면 : http://www.igotit.co.kr/zbxe/BRD_LINUX/205
리눅스 한글설정관련_locale : http://www.opensourcekorea.org/?doc=bbs/gnuboard.php&bo_table=Tips&wr_id=170
며칠 전 코딩을 하다가 shell_exec()에서 문제가 발생했었습니다.
$result = shell_exec(‘ls –al’);
echo $result;
라고 하면 파일 목록이 화면에 출력되는데..
$command = '…… command blah blah …‘;
$result = shell_exec(‘$command’);
echo $result;
라고 하면 아무것도 출력되는 것이 없었습니다.
원인은 바로 따옴표..
vim 설정이 되어 있지 않아서 color 구분이 안되어 지나친 것입니다.
작은 따옴표( ‘ )는 안에 들어있는 내용은 모두 string으로 인식하고,
큰 따옴표( “ )는 안에서 변수를 찾아 냅니다.
$result = shell_exec(“$command”); 또는 $result = shell_exec($command);
으로 작성해야 shell_exec()함수가 $command 명령을 수행하게 됩니다.
이런 특성 때문에 PHP 성능에도 영향을 미친다고 합니다.
문자열에 변수가 삽입될 경우 큰 따옴표를 사용할 수 있지만,
삽입된 변수가 없을 경우 작은 따옴표를 사용하는 것이 좋다고 합니다…^^
사용 예)
$value = ‘문자열’ . $var . ‘문자열’;
$value = “문자열 {$var} 문자열”;
참조 :
php 최적화 팁 : http://blog.ohmynews.com/hjlee222/
유용한 PHP성능 개선을 위한 팁 : http://www.xpressengine.com/study_php/1504400/page/4
Mencoder 설치 후 H.264 인코딩을 위해 구글에 공개된 podencoder 스크립트를 사용했습니다.
이 스크립트를 이용하기 위해 몇 가지 라이브러리를 추가로 설치해야 했습니다.
wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20090310-2245.tar.bz2
wget http://downloads.sourceforge.net/gpac/gpac-0.4.5.tar.gz
다운로드 된 파일의 압축을 풀어줍니다.
http://sourceforge.net/projects/faac/
./configure && make && make install
http://www.videolan.org/developers/x264.html
git 을 이용해 다운로드 할 수 있고 매일 업데이트되는 Tarball을 받을 수 있습니다.
다운로드 된 디렉토리에서 컴파일 후 설치합니다.
./configure && make && make install
configure 에 실행권한을 적용하고 설치합니다.
chmod 755 configure
./configure && make && make install
설치된 faac와 x264 라이브러리를 추가한 후 설치합니다.
./configure –-enable-jpeg –-enable-faad –-enable-faac-lavc –-enable-x264-lavc
make && make install
This howto is written for Ubuntu 8.10 and is verified to work on 8.2.2009.
I found numerous tutorials on this subject out there but they all failed me, but combination of them all was successful. So fallowing is made from 10 different tutorials.
And for all those who will ask why not just apt-get php5-ffmpeg, answer is so we can configure ffmpeg with libs and options we need.
cd /usr/local/src
wget http://www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2
wget http://rubyforge.org/frs/download.php/17497/flvtool2-1.0.6.tgz
wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz
wget http://superb-west.dl.sourceforge.net/sourceforge/ffmpeg-php/ffmpeg-php-0.6.0.tbz2
wget http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.gz
wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.2.tar.bz2
wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.3.tar.bz2
wget http://downloads.xiph.org/releases/theora/libtheora-1.0beta3.tar.gz
tar zxvf lame-3.97.tar.gz
tar zxvf libogg-1.1.3.tar.gz
tar zxvf libvorbis-1.2.0.tar.gz
tar zxvf flvtool2-1.0.6.tgz
tar jxvf essential-20071007.tar.bz2
tar jxvf ffmpeg-php-0.6.0.tbz2
bzip2 -cd amrnb-7.0.0.2.tar.bz2 | tar xvf -
bzip2 -cd amrwb-7.0.0.3.tar.bz2 | tar xvf -
tar zxvf libtheora-1.0beta3.tar.gz
apt-get install subversion ruby libcurses-ruby
저장소에서 체크아웃 받은 후 최신버전으로 업데이트합니다.
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
cd /usr/local/src/mplayer
svn update
mkdir /usr/local/lib/codecs
mv /usr/local/src/essential-20071007/* /usr/local/lib/codecs/
chmod -R 755 /usr/local/lib/codecs/
mkdir /usr/local/src/tmp
chmod 777 /usr/local/src/tmp
export TMPDIR=/usr/local/src/tmp
각 디렉토리에서 컴파일 후 설치합니다.
./configure && make && make install
cd /usr/local/src/flvtool2-1.0.6/
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install
{주의} H.264 인코딩 시 x264 라이브러리를 설치한 후 추가해야 합니다. : Mencoder Shell Script와 라이브러리 추가
cd /usr/local/src/mplayer
./configure --enable-jpeg
make && make install
cd /usr/local/src/ffmpeg/
./configure --enable-libmp3lame --enable-libvorbis --disable-mmx --enable-shared --enable-libamr-nb --enable-libamr-wb --enable-nonfree --enable-libtheora
make
make install
{주의} 설치도중 라이브러리를 찾을 수 없는 에러가 발생할 수 있습니다. 이 경우 심볼릭 링크를 통해 라이브러리 경로를 지정해 줍니다.
ln -s /usr/local/lib/[YOUR LIB NAME] /usr/lib/[YOUR LIB NAME]
cd /usr/local/src/ffmpeg-php-0.6.0/
phpize
./configure --with-ffmpeg=/usr/local/ffmpeg
make
make install
php.ini 에 모듈을 추가한 후 웹 서버를 다시 시작합니다.
echo 'extension=ffmpeg.so' >> /etc/php5/apache2/php.ini
/etc/init.d/apache2 restart