PHPの中でGDを使うにはPHPをインストールする前にGDライブラリー をインストールしなくてはなりません。 FTTHを導入しましたので Portsを利用しています、 Portsのインストールを行います。 |
FreeBSD 4.10 PHP+GDインストール手順 Note: あなたのシステムに/usr/ports 以下のディレクトリがなければ, portsが インストールされていません ログインを行います、作業はROOTの権限で行ってください。 GDライブライリーの使い方はPHPとLINKを張っていますので参照ください。New GDライブライリーは 2.0.28 2種類ありますので、あなたの必要とするPORTVERSIONを インストールしてください。今回はGDをインストールしました。 /usr/ports/graphics/gd と /usr/ports/japanese/gdは 日本語対応となっています。 # cd /usr/ports/graphics/gd # cd /usr/ports/japanese/gd # make # make install clean GDが正常にインストールされれば、次にPHPをインストールします。 # cd /usr/ports/lang/php4 # make install clean # cd /usr/ports/lang/php4-extensions # make install clean エラー無く終了すればApacheにPHPが追加されています。 # cd /usr/local/etc/apacheへ移動しhttpd.confを見てみますと。 LoadModule php4_module libexec/apache/libphp4.so AddModule mod_php4.c 上2行追加となっていますので PHP4 は追加されました。 次に/usr/local/etc/rc.dのapache.shで再起動します、 /usr/local/etc/rc.d/apache.sh stop /usr/local/etc/rc.d/apache.sh start を行えばPHPは動作しているはずです、確認のため /usr/local/www/data/test.phpをeditします。以下php.info <?php phpinfo(); ?> ブラウザでtest.phpを起動しますと以下の様に画面-1,画面-2 表示されます。
ついでですから、一気におまけGDライブラリーを使ったグラフを作成しました。 |
1)FreeBSD-5.3稼動中PCスペック 2005/04/18 |
名 称 | 内 容 | 備考 |
CPU | PentiumV600MHz×2(Dual) | |
RAMメモリ | 256MB (DIMM 128MB×2) | |
CASEケース | SVECFD7130-DP 300W 4U FA19インチラック収納 | |
M/B | TYAN製 S1832DL Tiger100 | |
Video | ATI 3D Rage Pro Turbo AGP 8MB | |
SCSI I/F | Adaptec2930 20MB/Sec | |
HDD(RVC 内蔵) | IDE(IBM) 15GB(system)×1, 30GB(data)×1 | |
NetWorkCard | Intel PILA8460B Management Adaptor | |
FDD | 2モード・ドライブ | |
メンテナンスKey | 108Key | |
メンテナンス(CRT) | VGAモード |
2)ちなみにFreeBSD-5.3をインストールしているサーバ関連 (1)apache+mod_ssl-1.3.33+2.8.22、samba-2.2.12 イントラネットで運用中です |
3)FreeBSD Symmetric Multi-Processor Kernl (Symmetric Multi-Processor Kernl) 4) FreeBSD-5.3 インストール 19インチラックサーバ FreeBSD-5.3 内部外観写真公開 (1)カスタムカーネルの構築とインストール FreeBSD ハンドブックより Note: もし, あなたのシステムに/usr/src/sys 以下のディレクトリがなければ, カーネルのソースが インストールされていません. もっとも簡単な方法は (rootで) /stand/sysinstall を用いて以下のようにします. 設定(Configure) を選んでから 配布ファイル(Distribution) を選択し, src の中の sys をインストールしてください. つぎに, i386/confに移動して, GENERIC コンフィグレーションファイルをカーネルに与えたい名前にコピーしてください. たとえば: # cd /usr/src/sys/i386/conf # cp GENERIC MYKERNEL ← お好きな名称に変更 例:BSD01 慣習として, この名前はすべて大文字でつづられます. もし, いくつかの異なるハードウェアのFreeBSDマシンを扱うなら, この名前にホスト名を含めるとよいでしょう. ここでは, 例として MYKERNEL と呼ぶことにします. Note: この作業は root権限でおこなう必要があります. そうでなければ, permission deniedというエラーが出ます. では, MYKERNEL をあなたの好きなエディタで編集してください. もし, システムをインストールしたばかりならば, 利用できるエディタは viだけかもしれません. ここでは使い方 の説明はしませんが, 参考図書にあるような多くの本で詳しく説明 されていますので, そちらを参照してください. FreeBSD にはより簡単なエディタとして ``ee'' があります. 初心者の方であればこちらをエディタに選ぶとよいでしょう. まずファイルの最初の方のコメント行を編集し, あなたのコンフィグ レーションに合せて変更した点などを記述して GENERIC と区別がつくようにしておきましょう. もし SunOSや他の BSDオペレーティングシステムでカーネルの 再構築をしたことがあれば, このファイルはとても親しみやすいでしょう. しかし, DOSのようなその他の オペレーティングシステムしか知らない人から見れば, GENERIC コンフィグレーションファイルはとても なじみにくいものかもしれません. そのような場合は, コンフィグレーションファイル の節をゆっくりと注意深く読んでください. Note: 古いバージョンの FreeBSD からアップグレードを おこなう場合, 新しいカーネルソースを得た場所より新しいバージョンの config(8) を取ってくる必要があるかもしれません. これは /usr/src/usr.sbinにあります. したがってこれらのソースをダ ウンロードする必要があります. 次のコマンドを実行する前に (configを)作りインストールをしておいてください. (2)編集個所は61行目の様に追加するだけです 以下の1箇所です (SMPカーネルを有効にするためには、次の1個所を必要とします) FreeBSD-4.XXまでは、GENERIC内に以下の様にコメントアウト されていましたが、FreeBSD-5.XXでは 別ファイルで 「 SMP 」が存在します。 ただ単にカーネルの 再構築を行っても追加されませんでしたので 従来の様に追加してみました、また options APIC_IOが64行目に「device apic # I/O APIC」が存在しましたので 以下の行は追加していません。 #options APIC_IO # Symmetric (APIC) I/O 1 # 2 # GENERIC -- Generic kernel configuration file for FreeBSD/i386 3 # 4 # For more information on this file, please read the handbook section on 5 # Kernel Configuration Files: 6 # 7 # http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html 8 # 9 # The handbook is also available locally in /usr/share/doc/handbook 10 # if you've installed the doc distribution, otherwise always see the 11 # FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the 12 # latest information. 13 # 14 # An exhaustive list of options and more detailed explanations of the 15 # device lines is also present in the ../../conf/NOTES and NOTES files. 16 # If you are in doubt as to the purpose or necessity of a line, check first 17 # in NOTES. 18 # 19 # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.413.2.6.2.2 2004/10/24 18:02:52 scottl Exp $ 20 21 machine i386 22 cpu I486_CPU 23 cpu I586_CPU 24 cpu I686_CPU 25 ident BSD01 ← GENERICをBSD01にした。 26 27 # To statically compile in device wiring instead of /boot/device.hints 28 #hints "GENERIC.hints" # Default places to look for devices. 29 #options SCHED_ULE # 5BSD scheduler 30 options SCHED_4BSD # 4BSD scheduler 31 options INET # InterNETworking 32 options INET6 # IPv6 communications protocols 33 options FFS # Berkeley Fast Filesystem 34 options SOFTUPDATES # Enable FFS soft updates support 35 options UFS_ACL # Support for access control lists 36 options UFS_DIRHASH # Improve performance on big directories 37 options MD_ROOT # MD is a potential root device 38 options NFSCLIENT # Network Filesystem Client 39 options NFSSERVER # Network Filesystem Server 40 options NFS_ROOT # NFS usable as /, requires NFSCLIENT 41 options MSDOSFS # MSDOS Filesystem 42 options CD9660 # ISO 9660 Filesystem 43 options PROCFS # Process filesystem (requires PSEUDOFS) 44 options PSEUDOFS # Pseudo-filesystem framework 45 options GEOM_GPT # GUID Partition Tables. 46 options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!] 47 options COMPAT_FREEBSD4 # Compatible with FreeBSD4 48 options SCSI_DELAY=3000 # Delay (in ms) before probing SCSI 49 options KTRACE # ktrace(1) support 50 options SYSVSHM # SYSV-style shared memory 51 options SYSVMSG # SYSV-style message queues 52 options SYSVSEM # SYSV-style semaphores 53 options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions 54 options KBD_INSTALL_CDEV # install a CDEV entry in /dev 55 options AHC_REG_PRETTY_PRINT # Print register bitfields in debug 56 # output. Adds ~128k to driver. 57 options AHD_REG_PRETTY_PRINT # Print register bitfields in debug 58 # output. Adds ~215k to driver. 59 options ADAPTIVE_GIANT # Giant mutex is adaptive. 60 61 options SMP # Symmetric MultiProcessor Kernel 62 63 64 device apic # I/O APIC ← FreeBSD-4.XXでは optionだった 65 66 # Bus support. Do not remove isa, even if you have no isa slots 67 device isa 68 device eisa 69 device pci 編集し終ったら、次のコマンドによってコンパイル, インストール を行って下さい。 # /usr/sbin/config BSD01 # cd ../compile/BSD01 ← 注意:不明ですがcompileのディレクトリが変わっていますのでBSD01はここに存在します。 # make depend # make # make install 新しいカーネルはルートディレクトリに /kernelという 名前でコピーされ、今までのカーネルは /kernel.old という名前へ変更されます。では、システムをシャットダウン、リブートして新しいカーネルを使って下さい。うまく行かない場合は、この章の終りの 問題が起きた場合には を参照して下さい。この章の新しいカーネルがブートしない場合のリカバリの方法を注意深く読んでおいて下さい。 (3)FreeBSD-5.3でTOPコマンドで、MAP(Duaul)CPU0(画面-1)、 CPU1(画面-2)が動作が確認されればOKです。
|
1)K&R-Cでプログラミング
あるHP Internet-Webサーバ・メンテナンスで更新のために夜中に転送していて、 何でこんなことをしているんだろうか? やっぱこれこそCPUにやってもらわないとね! Stimerを作っちゃいました。単なるTimerプログラムです。 |
→ 定期日付時間指定でプログラム&スクリプトをForkするプログラム(テキストファイル) → おまけサンプルbashスクリプト(FTPファイル転送)(テキストファイル) |
/********************************************************************************/ /* */ /* 著作権は放棄しません、自由に使用・改造・再配布可能です。 */ /* 改造版を再配布する際は、必ずファイル名を変更して、オリジナルを添付して */ /* 配布してください。 */ /* */ /* プログラム名 : 定期日付時間指定でプログラムをForkする */ /* 別のshスクリプトファイルでFTPファイル転送 */ /* ファイル名 : stimer.c */ /* 概要 : 自動で年月日時間 毎日/毎週 時間指定で */ /* パラメータ指定したプログラムを実行する。 */ /* */ /* 作成者 : S.Hata */ /* */ /* 適応装置 : FreeBSD & Linuxサーバ */ /* */ /* 変更履歴 : Make 2000/12/10 */ /* Ver Date 履歴(History) 氏名(Name) */ /* ---- -------- -------------------------------- ----------------- */ /* 0.1 00/12/12 新規作成 S.Hata */ /* 0.2 00/12/14 機能追加 毎時/毎週 S.Hata */ /* */ /********************************************************************************/ #include <stdio.h> #include <time.h> main(int argc, char *argv[]) { int weeki; int yeari,moni,mdayi; int houi,mini,seci; /********************************************************************************/ /* */ /* 処理 :パラメータのチェックと各種表示と説明 */ /* -o は年月日時分秒指定で1回のみ実効される */ /* -d は時分秒指定で毎日 指定時間に1回のみ実効される */ /* -w は時分秒指定で毎週 指定時間に1回のみ実効される */ /* */ /********************************************************************************/ if (( argc == 1 ) || ( argc < 6)) { usage(); } if (( argc == 2 ) && ( argv[1][0] == '-' ) && ( argv[1][1] == '?' )){ usage(); } /********************************************************************************/ /* */ /* 処理 :パラメータはオプション -o のチェックと月日時分秒の範囲チェック */ /* -o は年月日時分秒指定で1回のみ実効される */ /* */ /********************************************************************************/ if (( argc == 9 ) && ( argv[1][0] =='-' ) && ( argv[1][1] == 'o' || argv[1][1] =='O')){ /* fprintf( stdout, "No't loop day parameter \n"); fprintf(stdout,"%s \n",argv[1]); fprintf(stdout,"%s \n",argv[2]); fprintf(stdout,"%s \n",argv[3]); fprintf(stdout,"%s \n",argv[4]); fprintf(stdout,"%s \n",argv[5]); fprintf(stdout,"%s \n",argv[6]); fprintf(stdout,"%s \n",argv[7]); fprintf(stdout,"%s \n",argv[8]); */ yeari = atoi(argv[2]); moni = atoi(argv[3]); mdayi = atoi(argv[4]); houi = atoi(argv[5]); mini = atoi(argv[6]); seci = atoi(argv[7]); if ((moni == 0 ) || (moni > 12 )){ fprintf(stdout,"\7err: month no't val\n"); exit(0); } if ((mdayi == 0 ) || (mdayi > 31 )){ fprintf(stdout,"\7err: day no't val\n"); exit(0); } if ( houi > 23 ){ fprintf(stdout,"\7err: hour no't val\n"); exit(0); } if (( mini > 59 ) || ( seci >59 )){ fprintf(stdout,"\7err: min & sec no't val\n"); exit(0); } for (;;){ time_t t = time(NULL); struct tm *tp = localtime(&t); char *s = asctime(tp); /* fprintf(stdout,"%04d/%02d/%02d %02d:%02d:%02d \n", 1900+tp->tm_year,1+tp-> tm_mon, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec); */ if (( yeari == 1900+tp->tm_year) && ( moni == 1+tp->tm_mon) && (mdayi == tp->tm_mday ) && (houi == tp->tm_hour) && ( mini == tp->tm_min) && ( seci == tp->tm_sec)){ execlp( argv[8], argv[8], NULL); exit(0); } /********************************************************************************/ /* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */ /* 100/1000秒眠って待つ 100msec usleep(100) */ /* usleep(1000 * 1000); */ /* */ /********************************************************************************/ sleep(1); } } /********************************************************************************/ /* */ /* 処理 :パラメータはオプション -d のチェックと時分秒の範囲チェック */ /* -d は時分秒指定で毎日 指定時間に1回のみ実効され終了するKillシグナルで停止 */ /* */ /********************************************************************************/ if(( argc == 6 ) && ( argv[1][0] =='-' ) && ( argv[1][1] == 'd' || argv[1][1] == 'D')){ fprintf(stdout,"%s ",argv[1]); fprintf(stdout,"%s:",argv[2]); fprintf(stdout,"%s:",argv[3]); fprintf(stdout,"%s ",argv[4]); fprintf(stdout,"%s \n",argv[5]); houi = atoi(argv[2]); mini = atoi(argv[3]); seci = atoi(argv[4]); if ( houi > 23 ){ fprintf(stdout,"\7err: hour no't val\n"); exit(0); } if (( mini > 59 ) || ( seci >59 )){ fprintf(stdout,"\7err: min & sec no't val\n"); exit(0); } for (;;){ time_t t = time(NULL); struct tm *tp = localtime(&t); /* char *s = asctime(tp); */ fprintf(stdout,"%02d:%02d:%02d \n", tp->tm_hour, tp->tm_min, tp->tm_sec); if ((houi == tp->tm_hour) && ( mini == tp->tm_min) && ( seci == tp->tm_sec)){ system( argv[5] ); } /********************************************************************************/ /* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */ /* 100/1000秒眠って待つ 100msec usleep(100) */ /* usleep(1000 * 1000); */ /* */ /********************************************************************************/ sleep(1); } } /********************************************************************************/ /* */ /* 処理 :パラメータはオプション -w 1,2,3,4,5,6,7 のチェックと時分秒の範囲チェック */ /* 対応順は1,2,3,4,5,6,7 日月火水木金土 */ /* -w は時分秒指定で毎週 指定時間に1回のみ実効され終了Killシグナルで終了する */ /* */ /********************************************************************************/ if (( argc == 7 ) && ( argv[1][0] =='-' ) && ( argv[1][1] == 'w' || argv[1][1] =='W')){ fprintf(stdout,"%s ",argv[1]); fprintf(stdout,"%s ",argv[2]); fprintf(stdout,"%s:",argv[3]); fprintf(stdout,"%s:",argv[4]); fprintf(stdout,"%s ",argv[5]); fprintf(stdout,"%s \n",argv[6]); weeki = atoi(argv[2]); houi = atoi(argv[3]); mini = atoi(argv[4]); seci = atoi(argv[5]); if ( houi > 23 ){ fprintf(stdout,"\7err: hour no't val\n"); exit(0); } if (( mini > 59 ) || ( seci >59 )){ fprintf(stdout,"\7err: min & sec no't val\n"); exit(0); } if (( weeki <0 ) || ( weeki>8 )){ fprintf(stdout,"\7err: week-day no't val 1,2 3,4,5,6,7 \n"); exit(0); } for (;;){ time_t t = time(NULL); struct tm *tp = localtime(&t); /* char *s = asctime(tp); fprintf(stdout,"%02d:%02d:%02d \n", tp->tm_hour, tp->tm_min, tp->tm_sec); */ if ((houi == tp->tm_hour) && ( mini == tp->tm_min) && ( seci == tp->tm_sec)){ system( argv[6] ); } /********************************************************************************/ /* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */ /* 100/1000秒眠って待つ 100msec usleep(100) */ /* usleep(1000 * 1000); */ /* */ /********************************************************************************/ sleep(1); } } } usage() { fprintf(stdout,"\7Usage : stimer -o yyyy mm day hour min sec fork-program\n"); fprintf(stdout," : -d hour min sec fork-program\n"); fprintf(stdout," : -w (1-7) hour min sec fork-program\n"); fprintf(stdout," : -w 1=Sunday - W 7=Satuday hour min sec fork-program\n"); exit(0); } /* end of program eof */ |
さっそく遊んでみましょう。 cc -o stimer stimer.c でコンパイルが通ればOKです。 オブジェクトを cp stimer /usr/local/bin/stimer にコピーして、 stimer -o 2001 01 03 12 00 00 /pcusr/tmp/sh.ftp & で、 その時間になれば、sh.ftpが実行されます。 バックグランドジョブで動かしたければ >/dev/null & ログをとりたければファイルへ >/tmp/stimer.log |
注意 : | このプログラムは個人の責任において御試用して下さい。 私は一切の責任をとらないものとします。 |