PMCJは、フリーCGIを中心としたプログラムの配布及び製作やCGIレンタルサービスをしているサイトです。
 alt=
広告

フリーCGIプログラム配布/CGIレンタルサービスサイト

Information Profile Contact PMCJ BBS SiteMap
 HOME  > HOW TO   >  CGI/SSI COLOR HTML

RSSフィードCGI更新情報 RSSフィード


Services

レンタルCGI/掲示板・リンク

プログラム/CGI・FLASH・JavaScript・C++

画像フリー素材

How To

Links

Users




QRコード

携帯読取QRコード
読取未対応の方

PMCJ 携帯用HP www.pmcj.com/p/

※ 3キャリア(DoCoMo SoftBank au)の他、ClubAirH" 及び H"-link でもご覧になれます。


※ 当サイト配布一部ソフトは、下記各サイトからもダウンロード出来ます。

Vector

ダウンロード@nifty

フラットワールドソフト

 2024年 4月 
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

EPSLON

Let’s Encrypt







How To - CGI設置簡易入門 -



CGI / SSI


 

簡単なCGIカスタマイズ


CGIカスタマイズ

≫        

    ここでは、簡単に出来るカスタマイズとして幾つかの例を上げます。

  1. メールヘッダ 「subject:」「To:」「From:」 のデコード


    メールヘッダ 「subject:」「To:」「From:」 のデコードをISO-2022-JP、MIME encoded-wordとして、メール文字化けを防ぐ方法です。

    (A) 生田さん開発 mime_pls(Perlライブラリ)の mimew.pl を使った、メールフォーム
       ダウンロード : mime_pls
    (B) 当サイト配布の b64mclib.pl を使った、メールフォーム
       ダウンロード : Base64 Mail Convert library

    Web Mail [E]での例1
    #日本語コード変換ライブラリの場所
    require './jcode.pl';
    require './mimew.pl'; (A)の場合
    require './b64mclib.pl'; (B)の場合
    #
          ・
       省略
          ・
    sub sendmail{
    
    	&timeget;
    	$formco = @SNADATE;
    	$formco -= 1;
    
    	&jcode'convert(*subje,'jis'); (B)の場合削除可
    	$subje = &mimeencode($subje); (A)の場合
    	b64mc::Bace64Encode(\$subject, 'jis', 1); (B)の場合
    	&jcode'convert(*title,'jis');
    	&jcode'convert(*TIME,'jis');
    
    赤文字の部分が、追加する記述部分です。

    ディフォルトでは、jis変換でメールヘッダに書き込んでいる為、2byte文字(日本語)をタイトルに使用している場合はOS、メーラーによっては文字化けの原因となります。

    で、上記のようにデーコードをすると回避出来ますのでお試し下さい。


    Web Mail [E]での例

    次は、差出人メールにもこれを利用して、ニックネーム付きメールにしてみます。
    #日本語コード変換ライブラリの場所
    require './jcode.pl';
    require './mimew.pl'; (A)の場合
    require './b64mclib.pl'; (B)の場合
    #
          ・
       省略
          ・
    sub sendmail{
    
    	&timeget;
    	$formco = @SNADATE;
    	$formco -= 1;
    	$tomail = "佐藤 <$masmail>";
    
    	&jcode'convert(*subje,'jis'); (B)の場合削除可
            (A)の場合
    	$subje = &mimeencode($subje);
    	&jcode'convert(*tomail,'jis');
    	$tomail = &mimeencode($tomail);
            (B)の場合
    	b64mc::Bace64Encode(\$subject, 'jis', 1);
    	b64mc::Bace64Encode(\$tomail, 'jis', 1);
    
    	&jcode'convert(*title,'jis');
    	&jcode'convert(*TIME,'jis');
    
    赤文字の部分が、追加する記述部分です。

    そしてその下部の方にある「"To: $masmail\n";」となっている箇所を「"To: $tomail\n";」として終わりです。(2箇所あります。)



  2. ファイルデーター消滅回避の強化


    当方配布のCGIもロックファイルを利用した、データー消滅回避処理をしていますがサーバーによってロックファイルが使えない等色々な原因で消滅が多発する場合もあると思います。

    下記方法等、色々と回避方法を見直すのも良いかと思います。

    EasyBBS [E]での例1

    -------------- ディフォルト -------------
    sub filedisp {
    
    	if (!open(FILE,">$bbsdate")) { &unlock;&massehtml($no = 0); }
    	eval 'flock(FILE,2);';
    	print FILE @BDATE;
    	eval 'flock(FILE,8);';
    	close(FILE);
    }
    
    --------------  編集後  -----------------
    sub filedisp {
    
    	$temp = $bbsdate . "_tmp";
    
    	if (!open(FILE,">$temp")) { &unlock;&massehtml($no = 0); }
    	eval 'flock(FILE,2);';
    	print FILE @BDATE;
    	#eval 'flock(FILE,8);';
    	close(FILE);
    
    	if($#BDATE >= 0){ rename($temp,$bbsdate); }
    
    }
    
    上記の例は、投稿書き込みの際、一度テンポラリファイルを作りそこにデーターを書き込みます。

    そのテンポラリファイルでのデーターが消滅されていない事を確認($#BDATE >= 0)し、通常のファイル名にリネームするといった処理です。

    #eval 'flock(FILE,8);';のロック専用関数によるファイルロック解除のコメントアウトは、close(FILE);において自動的に解除されますので古いバージョンのperlでは特にコメントアウトした方が良いでしょう。

    symlink及びopenによるファイルロック(2重ロック)は、サブルーチン「filedisp」の前でも処理していますがまだ色々と良い方法(truncate、seek等を用いたりとか)があると思いますので色々と考えてみましょう。但し、100%のと言う処理は不可能ですので大切なデーターのバックアップは不可欠です。



  3. シグナルを用いた処理例

    • 良くファイルロックが残ってしまうと言う方は以下の方法等を試してみるのも良いでしょう。

      $SIG{INT} = $SIG{HUP} = $SIG{QUIT} =  $SIG{PIPE} = 
      		$SIG{TERM} = $SIG{KILL} = "unlock";
      
      sub unlock {
      	if (-e $lockfile) { unlink($lockfile); }
      }
      
    • アラームシグナルを利用する場合。

      $SIG{'ALRM'} = "timeout";
      
      alarm(5);
      
      処理文
      
      alarm(0);
      
      sub timeout {
      	print "Content-type: text/plain\n\n";
      	print "タイムアウトになりました。\n"
      	exit;
      }
      


  4. スマートフォン・タブレットでの閲覧を見やすくする


    • 当サイト配布 [ WEB Blog ] を例にします。
      HTMLヘッダーの書き出し部分に<META>タグを付け加えるだけです。
      <META name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">

      ※ あくまでも見やすくする為で、これだけでスマートフォン・タブレット用CGIになるわけではありません。

      カスタマイズ : ./data/template/MainBaseA or B.dat の METAタグと同じ並びにでも ...
      <HEAD><TITLE>#BLOG_TITLE#</TITLE>
      <META http-equiv=Content-Type content="text/html ... 省略 ...
      <META name="viewport" content="width=device-width, ... 省略 ...
      <META http-equiv="pragma" content="no-cache" />
      
    • その他の配布CGIについては ...
      CGI内のサブルーチン [ sub header ] に<META>タグの記述がありますのでそこに続けて差加えます。

      1 . print "<html><head><meta ... 省略 ... \n"; となっている場合。

      print "<META name=\"viewport\" content=\" width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1\">\n";

      ※ <META>タグ内の ["] の前に[\]マークを付けるのを忘れないで下さい。

      又は、シングルクォート[']で print する

      print '<META name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">' . "\n";

      2 . print <<"CANCELL";
          <html><head>
          <META http-equiv=Content-Type  ... 省略 ...
          ... 省略 ..
          CANCELL 
      
      のようになっている場合はそのまま、<head>〜</head>内に書き入れる。

    • viewport content属性に付いて

      widthdevice-width : 端末画面にあわせる (数値設定も可 px)
      heightdevice-height : 端末画面にあわせる (数値設定も可 px)
      user-scalableズーム操作 拒否:no 許可:yes
      initial-scale初期表示の倍率数値
      maximum-scale最大倍率の数値指定(0〜10まで、デフォルト: 0.25)
      minimum-scale最小倍率の数値指定(0〜10まで、デフォルト: 1.6)


  5. おまけ? カレンダーをポップアップメモに


    • 当サイト配布 [ Mini Diary ] を使います。
      当ホームページの左下にあるカレンダーのように、下線の付いた日付にマウスをあてると ステータスバー及びポップアップでその日のメモが表示されます。

      カスタマイズ : calender.pl 214行目〜
      open(LOG, "<$url"); while (){ $_ =~ ... 省略 ...
      #$link = '<a class=Ca href="javascript ... 省略 ...
      #		'\',\'' . $log . '\')">'  ... 省略 ...
      $link = '<u><font onmouseover="window.status=\'' . $log . 
      	'\';return true;" style="cursor:pointer;" title="' . 
      		$log . '">' . $lname . '</font></u>' . "\n";
      
      現在のコメントデータがある場合の処理部分をコメントアウトし赤文字の部分を追加し入れ替えをします。( # はコメントアウト )

      title = ポップアップ表示、window.status = ステータスバー表示となります。

       style="cursor:pointer;" はポインターを矢印から指にする為の記述です。


Topへ

シグナル

≫        

    カスタマイズの項「シグナルを用いた処理」に関連し、シグナルについて少々....

  1. シグナル一覧を参照する


    telnet 又は プロンプト等で、killコマンドを参照します。
    $ kill -l
    HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG S TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2


  2. シグナルとシグナルナンバー


    SIGHUP1ハングアップSIGSTOP17中断
    SIGINT2割り込みSIGTSTP18
    SIGQUIT3終了SIGCONT19SIGSTOPを再開
    SIGILL4SIGCHLD20
    SIGTRAP5SIGTTIN21
    SIGABRT6SIGTTOU22
    SIGEMT7SIGIO23
    SIGFPE8SIGXCPU24
    SIGKILL9強制終了SIGXFSZ25
    SIGBUS10SIGVTALRM26
    SIGSEGV11SIGPROF27
    SIGSYS12SIGWINCH28
    SIGPIPE13無プロセスパイプSIGLOST29
    SIGALRM14アラームSIGUSR130ユーザー定義1
    SIGTERM15終了SIGUSR231ユーザー定義2
    SIGURG16  

Topへ
その他 ≫        
  1. Perlバージョンアップに伴う jcode.plエラー


    • Perlバージョンアップに伴い標準エラー出力を吐くようになりました。

      defined(%hash) is deprecated at /home/pmcj/cgisub/jcode.pl line 684. (Maybe you should just omit the defined()?)
      defined(%hash) is deprecated at /home/pmcj/cgisub/jcode.pl line 693. (Maybe you should just omit the defined()?)

      以下2箇所を修正します。

      修正箇所 jcode.pl 684行目、693行目の [ defined ] を削除します。
      sub z2h_euc {
          local(*s, $n) = @_;
          &init_z2h_euc unless defined %z2h_euc; ← 684行目
          $s =~ s/($re_euc_c|$re_euc_kana)/
      	$z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1
          /geo;
          $n;
      }
      
         修正前 :  &init_z2h_euc unless defined %z2h_euc;
         修正後 :  &init_z2h_euc unless %z2h_euc;
      
      sub z2h_sjis {
          local(*s, $n) = @_;
          &init_z2h_sjis unless defined %z2h_sjis; ← 693行目
          $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ?  ... 省略 ...
          $n;
      }
      
         修正前 :  &init_z2h_sjis unless defined %z2h_sjis;
         修正後 :  &init_z2h_sjis unless %z2h_sjis;
      
      
      修正に不安のある方は、修正したjcode.pl(著作権 Utashiroさん)
      を、とりあえず ダウンロード出来るようにしました。

      ※ 配布CGIの更新等での修正jcode.pl含む同封が終えるまで。
      ※ 17/06/28追記 元ファイルと紛らわしくなるようですのでファイル名を変更しました。


 楽天売れ筋プログラミング入門書 etc ...






広告


広告募集中

【PR1】堺の税理士事務所・堺市
【PR2】堺で会社設立・堺市
【PR3】広告欄
【PR4】広告欄
【PR5】広告欄
【PR6】広告欄
【PR7】広告欄
【PR8】広告欄
【PR9】広告欄
【PR10】広告欄
【PR11】広告欄
【PR12】広告欄
広告募集中




 


| HOME | SERVICES > レンタル - プログラム - フリー素材 | HOW TO | LINKS | USERS |
- Porfile - What's New - Information - Contact - PMCJ BBS - .特定商取引法に基づく表示 - 個人情報保護ポリシー - ※ SiteMap
Copyright (C) 1998-2017 Sato IT Studio PMCJ by Tomio Sato. All Rights Reserved.