#contents

*[[ショウジョウバエ研究会オンライン登録プログラム:http://www.kit.ac.jp/~tomaru/jdrc7registration.html]] [#i3450bfa]

ショウジョウバエ研究会第7回研究集会で使ったオンライン登録のための PHPスクリプト
松尾隆嗣さん(東京都立大学)の力を借り、都丸雅敏(京都工芸繊維大学)とふたりで作成した2005年のショウジョウバエ研究会のオンライン登録のための PHP スクリプトです。~
著作権は松尾と都丸にあります。GNU General Public License version 2 (gpl.txt)または、その上位バージョンの下で配布は自由です。


*PukiWiki [#a359a032]

** MathJax が使えるようにする 20 February 2015 [#p17c4f49]
参考 [[MathJaxの使い方 by くろきげん>http://genkuroki.web.fc2.com/]]

pukiwiki.skin.php の <head> と </head> の間に下のコード(ミニマム設定[$ $ は使えない])を入れればおっけい。~

 <script type="text/javascript"
   src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">
 </script>



出力例:

コード
 \(\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}\)
出力~
\(\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}\)

コード
 \[
 \sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}
 \tag{3}
 \]

出力~
\[
\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}
\tag{3}
\]

くろきさんの、
 デフォルトの設定では \( \) のみが使用できるが、このファイルでは $ $ も
 使えるようにしてある。$ $ がデフォルトの設定で使えないようにしてある理由は
 米語の文書に $ が頻出するからである。日本語で書く場合には も使えた方が便利
 だと思う。

のコード(下)をそのまま利用すると、地の文に $ が入っているところが化けてしまうので採用せず。

 <script type="text/x-mathjax-config">
   MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ["\\(","\\)"]] } });
 </script>
 <script type="text/javascript"
   src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML">
 </script>
 <meta http-equiv="X-UA-Compatible" CONTENT="IE=EmulateIE7" />

**特定のIP addressからしか閲覧できないページを設定する 08 June 2013 [#wd738427]

某センターのサービスページで学内専用が必要と思い立った。~
某お役所が簡単に見たり、&ruby(ま){況};してや、
グーグルさんに提示されたりしたらあまりハッピーじゃない、
という秘密っぽいことが書けるようにしたいのです。

Natsuko's Homepage の 
[[PukiWiki/アクセス制限>http://www.ioa.s.u-tokyo.ac.jp/~natsuko/pukiwiki/index.php?PukiWiki%2F%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E9%99%90]]
を参考に設定しました。
ほぼそのままですが、一カ所修正しています。

pukiwiki.ini.php

 // Read auth (0:Disable, 1:Enable)
 $read_auth = 1;
 
 $read_auth_pages = array(
         // Regex                   Username
 );

$read_auth を有効にしないと、IP address による制限ができないとのこと。~
$read_auth_pages の中身を空にすると、誰でも閲覧可になる。
ので、$read_auth を有効にしても問題ない。

lib/auth.php

Basic authentication (function basic_auth) に追加(2ヶ所)

172行目に追加

Natsuko さんのは、in_array でページ名の一致を見ているコードですが、
プリフィクス KITdoc があるページは全て学内専用となるようにしたかったため、
preg_match で判断させました。違いはここだけです。

 // 08 June 2013 for access limit page by IP address
        $auth_network       = '/^133.16./'; 
        $auth_network_pages = '/^KITdoc/';
 
        if (preg_match($auth_network, $_SERVER['REMOTE_ADDR']) || ! preg_match($auth_network_pages, $page)) {
 // End of 08 June 2013 for access limit page by IP address

挿入場所
 global $auth_method_type, $auth_users, $_msg_auth;
 <<ココ!>>
 // Checked by:
 $target_str = '';
  if ($auth_method_type == 'pagename') {

198行目に追加
 // 08 June 2013 for access limit page by IP address
        } else {
          $user_list = array();
          $auth_flag = false;
        }
 // End of 08 June 2013 for access limit page by IP address

挿入場所
 global $auth_method_type, $auth_users, $_msg_auth;
 		// Basic-auth with $_SERVER['HTTP_AUTHORIZATION']
 		list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) =
 			explode(':', base64_decode($matches[1]));
 	}
 <<ココ!>>
 
 	if (PKWK_READONLY ||
 		! isset($_SERVER['PHP_AUTH_USER']) ||
 		! in_array($_SERVER['PHP_AUTH_USER'], $user_list) ||
 		! isset($auth_users[$_SERVER['PHP_AUTH_USER']]) ||
 		pkwk_hash_compute(

どちらも消すものはありません。追加のみ。

真似して、diffの出力も貼り付けときます。

 173,179d172
 < // 08 June 2013 for access limit page by IP address
 <        $auth_network       = '/^133.16./'; 
 <        $auth_network_pages = '/^KITdoc/';
 < 
 <        if (preg_match($auth_network, $_SERVER['REMOTE_ADDR']) || ! preg_match($auth_network_pages, $page)) {
 < // End of 08 June 2013 for access limit page by IP address
 < 
 206,211d198
 < // 08 June 2013 for access limit page by IP address
 <        } else {
 <          $user_list = array();
 <          $auth_flag = false;
 <        }
 < // End of 08 June 2013 for access limit page by IP address


**メニューバー内で単語が途中で改行されないようにする 05 June 2013 [#lbdba093]

skin/pukiwiki.css.php の div#menubar(CSSの設定)の 
word-break の値を break-all から normal に変える
 div#menubar{
 ……略……
  word-break:normal;
 ……略……
 }
参考:[[generate_tagsプラグインによるタグを用いたページ分類>http://kinakomochi.6.ql.bz/?generate_tags%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AB%E3%82%88%E3%82%8B%E3%82%BF%E3%82%B0%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E3%83%9A%E3%83%BC%E3%82%B8%E5%88%86%E9%A1%9E]]

**PukiWikiで上付き文字下付き文字 02 August 2009 [#o8844bf0]

[[PukiWiki/1.4/ちょっと便利に/上付き下付き文字>http://pukiwiki.sourceforge.jp/dev/?PukiWiki%2F1.4%2F%A4%C1%A4%E7%A4%C3%A4%C8%CA%D8%CD%F8%A4%CB%2F%BE%E5%C9%D5%A4%AD%B2%BC%C9%D5%A4%AD%CA%B8%BB%FA]] にしたがって、pluginフォルダに、pluginのファイル(super.inc.php、subsc.inc.php)を入れた。文字の大きさも少し調整して80%に。リンク先とは調整がちょっと違います。
 return "<span style=\"font-size:80%;vertical-align:super\">$body</span>";
 または
 return "<span style=\"font-size:80%;vertical-align:sub\">$body</span>";

これで
 Super&super{super}; & Sub&subsc{sub};
とすると右のようになる  Super&super{super}; & Sub&subsc{sub};~
PukiWikiプラスなら、もとからプラグインがあったんですが、う〜ん

**WikiNameに自動的なリンクを生成させないようにする 22 September 2007 [#s2b9a8a9]

WikiNameのように大文字が2つ入った単語を、pukiwikiのデフォルトでは、
WikiNameと認識して、リンクを作るようになっています。
そういう名前のページがないと、?がついて、クリックするとページを作るように
なります。~

ふだん、本文中で新しいWikiNameのページを作るような書き方はしないので、
この機能を停止させることにしました。
その結果、「McAfee」、「VirusScan」、「WinEyes」、「OneLook」などに?が付かなくなり、見やすくなりました

pukiwiki.ini.php
 /////////////////////////////////////////////////
 // _Disable_ WikiName auto-linking
 $nowikiname = 1; // 22 September 2007 // 0; -> 1;


**pukiwikiで、静的ページhtmlに偽装する 22 September 2007 [#h70e20bc]

pukiwikiの各ページは「index.php?ほにゃほにゃほにゃ」のようになるので、
いまひとつ。そこで、「ほにゃほにゃほにゃ.html」となるように設定~
http://terai.xrea.jp/PukiWiki/RewriteEngine.html のとおりに .htaccessに加えた。
もっとワザを使う場合にはいろいろあるようですが、これが一番単純なので
これだけにしている。~
実際の設定は、01 July 2006

.htaccess(pukiwiki.ini.php のあるディレクトリのもの)に追加
 DirectoryIndex index.php
 RewriteEngine on
 RewriteBase /~tomaru/pukiwiki
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)\.html(#.*)?$ index.php?cmd=read&page=$1$2 [L]

**PukiWikiで閲覧は誰でも可、編集・新規ページ作成は登録ユーザのみとするための設定 [#a4438299]
 pukiwiki.ini.phpの設定(抜粋)
 1.$auth_usersを設定する
 $auth_users = array(
 	'foo'	=> 'foo_passwd', // Cleartext
 );
 1−2. Authentication methodを変える(これをしないと不具合があるようだ 01 July 2006)
 //$auth_method_type = 'contents';	// By Page contents
 $auth_method_type = 'pagename';	// By Page name  02 April 2006
 
 2.$edit_auth を有効にする
 $edit_auth = 1;
 3.Edit auth regex を設定する(正規表現!)
 $edit_auth_pages = array(
        '/^.*$/' => 'foo',			 
 );
 これで、編集・新規ページ作成のときにBasic認証(のようなもの?)が行われる。


*php: hypertext processor その2 [#q634042d]

**ファイルの「ダウンロードダイアログ」が常に開くようにする 05June2013 [#ob72b6da]

某センターの内部利用のウェブページにて、
テキストファイルを「ダウンロード」する必要がある。
必ずダウンロードしなければならないので、
右クリックさせるのはよくない設計。
ボタンをクリックしたらダイアログが開くのがよい。

テキストファイルは php が生成したものなので、php で作った。

が、しかし、その方法がわからず……

結論としては、
 Content-Disposition: attachment; filename=fname.ext
だそうな。~
[[[HOWTO] 既知の MIME タイプに対し [ファイルのダウンロード] ダイアログ ボックスを開く(マイクロソフトのページ)>http://support.microsoft.com/kb/260519/ja]]

で、実装は……、

 <?php
 $myfile = $_GET['file'];
 $myid = $_GET['id'];
 $mydate = date('Y-m-d');
 header('Content-Disposition: attachment; (← 実際はココで改行せず。) 
 filename="'.$mydate.'-'.$myfile.'-'.$myid.'.txt"');
 readfile($myfile.'.txt');
 exit;
 ?>
 (↑これが全てです)

との php ファイルを form で呼び出す。

 <form action="download.php?file=return&id=<?php echo $myid?>" method="post">
 <input type="submit" value="ファイルをダウンロードする">
 </form>
 (抜粋です)

ダウンロード用の php ファイルが呼び出されると、
サーバにあるテキストファイルを
「日付-名前-ID.txt」とのファイル名で
ダウンロードするダイアログが開く。

という具合です。

formの側で、名前と id を post 渡ししているので、
ちょっとだけ使い回しができています。

他に参考にしたもの
- [[phpの関数のマニュアル(header)>http://php.net/manual/ja/function.header.php]]
- [[エンジニアさんの「Tipsというかメモ」というページの記事 HTTP :: Content-Disposition: inline / attachment>http://tm.root-n.com/protocol:http:content_disposition]]
-[[KJさんのブログ PHPでファイルをDLさせる際のPHPコード例>http://phpspot.org/blog/archives/2008/02/phpdlphp.html]]


*php: hypertext processor [#v5e8f85e]

ちょっとだけ、phpのコードがあります。ショウジョウバエ遺伝資源センターでは、ユーザがのストックリストを検索して、必要なショウジョウバエの系統をリクエストするページを提供しています。 php + postgreSQL で作っているので、そのときに覚えてしまった(!)ことをちょっとだけ。

ショウジョウバエ遺伝資源センターでは、ユーザがのストックリストを検索して、必要なショウジョウバエの系統をリクエストするページを提供しています。~
検索し、そのなかから複数の系統を一時的に記憶し、最後に確認の後にリクエストする、ということを行います。お買い物サイトと同じです。~
ストックリストは、リレーショナルデータベースの postgreSQL を使い、その操作とweb インタフェイスには、phpを使いました。ページが変わっても情報を保持しつづけるために、セッションを使っています。セッションを使えばクッキーを使わずにすむし、いろいろ複雑なことも出来て便利なようです(使いこなせていませんが)。慣れれば簡単なのでしょうけれども、セッションにはちょいと苦しめられました。ソースコードは下に。

                     Under construction (ちょっと待ってて)

そのほかのことも。

1. ブラウザの判定:<button> </button> が使えるブラウザを判定する。使えるのは、マイクロソフトインターネットエクスプローラとネットスケープ6。
      $str = $HTTP_USER_AGENT;
      $dgrc_browser;
      if(eregi("MSIE", $str) || eregi("Netscape6", $str)) {
           $dgrc_browser="IENN6";
      } else {
           $dgrc_browser="NN4";
      } 

*html tips [#g14f4de6]

html のちょっとしたこと(小技?)を

上のようにして、ストックを検索するページを作るときに、結果的に html のちょっとしたこと(小技?)を学んでしまいました(無用な知識?が増えてしまった……)。

1. 別なサイトから呼び出されたときに、フレームの中では開かないようにする。下のコードを <head> </head> の中に書いておけばよい。
      <script language="JavaScript">
      <!--
      if(self != top){
      top.location.href = self.location.href;
      }
      //-->
      </script>

2. 文字セットをISO 8859-1(=Latin1)にする。下のコードを <head> </head> の中に書いておけばよい。こうしておくと日本語は確実に読めません (^^;
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

3. ○秒後に別なページへ飛ぶ。下のコードを <head> </head> の中に書いておけばよい。
      <meta http-equiv="Refresh" content="3; URL=移動先のURL">
この例では3秒後に移動する。

4. プロポーショナルフォントを使わないようにする。 <tt> と </tt> で囲む。
      <tt>non proportional</tt> ← プロポーショナルフォントにならない。
      proportional ← プロポーショナルフォントになる(tとiとoの文字の間隔に注目!)。
プロポーショナルフォントを使わないようにブラウザを設定しているときは、プロポーショナルフォントを使うようにはなりません。

*shell script [#o8e5bf5b]
**htmlファイルを加工する 4th April 2008 [#d6e64187]
下のようなhtmlファイル(ファイル名:P001.html:具体的にはエクセルから吐き出されたもの)を加工する
|<html>|BGCOLOR(fuchsia):head.htmlと差し替え|
|<head>|BGCOLOR(fuchsia): |
|……|BGCOLOR(fuchsia): |
|<…… shift_jis ……>|BGCOLOR(fuchsia): |
|……|BGCOLOR(lime):残す(upper.html)|
|</head>|BGCOLOR(lime): |
|<body>|BGCOLOR(fuchsia):P001title.htmlと差し替え|
|……|BGCOLOR(lime):残す(lower.html)|
|</body>|BGCOLOR(fuchsia):tail.htmlと差し替え|
|</html>|BGCOLOR(fuchsia): |

-shell script

 #!sh
 grep -A 10000 "shift_jis" P001.html >temp01.html; 
 grep -v "shift_jis" temp01.html >temp1.html; 
 grep -B 10000 "<body" temp1.html > temp0.html; 
 grep -v "<body" temp0.html> upper.html; 
 grep -A 10000 "<body" temp1.html > temp2.html; 
 grep -v "<body" temp2.html > temp22.html; 
 grep -v "</body" temp22.html > temp23.html; 
 grep -v "</html" temp23.html > lower.html; 
 cat head.html upper.html P001title.html lower.html tail.html > temp3.html; 
 sed -e s/"str border=0"/"str border=1"/g temp3.html> temp4.html; 
 nkf --utf8 -Lu temp4.html  > P001.html

-grepを使って、必要部分を切り出す -> upper.html と lower.htmlを作る
 grep -A num 文字列: 文字列とその下num行を表示
 grep -v 文字列: 文字列を含まない行のみ表示
 grep -B num 文字列: 文字列とその上num行を表示

-あらかじめ作っておいたファイル(head.html、P001title.html、tail.html)と結合する
-一部文字列を修正する(sed: s/文字列1/文字列2/g は、perlの正規表現による置換と同じ)
-文字コードをutf-8に変更する

※ shell scriptを使う場合、パイプが働かないので注意

**拡張子追加 4th April 2008 [#wfe37afc]
ファイル名がPではじまるものに、拡張子「.txt」を追加

 #!sh
 for num in P*; 
  do 
   mv $num ${num}.txt;
  done

*perl [#e81a8f91]
**URIのリストから、それへのリンク付きのリストのhtmlファイルを作る 15 Jan 2009 [#ac1d2871]

こんな感じのリスト(下)をリンク付きのリストのhtmlファイルにする~
in.txt
 http://www.kit.ac.jp/
 http://www.yahoo.co.jp/
 http://www.google.co.jp/

makelink.pl
 #!perl
 print "<html>\n";
 print "<body>\n";
 print "<ul>\n";
 while(<>){
     chop;
     print "<li><a href=\"$_\" target=\"_blank\">$_</a>\n";
 }
 print "</ul>\n";
 print "</html>\n";
 print "</body>\n";

使い方
 perl makelink.pl <in.txt >out.txt 

メールに貼り付けて Thunderbird ででも受け取ればできちゃうのですけど、Pukiwikiに貼ってもできますけど……。

**タブ区切りテキストからカラムを抜き出す 16th March 2009 [#iddd8cdf]

タブ区切りテキストの「2列目」と「5列目」を抜き出す

first2and5.pl
 #!perl
 while(<>){
     chop;
     split /[\t]/;
     print "@_[1]\t@_[4]\n";
 }

使い方
 perl first2and5.pl <in.txt >out.txt 

これで26めがのファイルから必要な部分が取り出せて、1めがになった。えくせる使うと簡単なようだけど、文字化けとか、ヘンなところにヘンな文字が入るとか、セーブするとヘンになっちゃうとか、エラーが起こるので、テキストのまま処理するほうが確実だったりする。

|Today:&counter(today);|Yesterday:&counter(yesterday);|Total:&counter(); since 02 April 2006|

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS