HtmlTemplateFramework
[ class tree: HtmlTemplateFramework ] [ index: HtmlTemplateFramework ] [ all elements ]

Source for file htf_com_func.inc

Documentation is available at htf_com_func.inc

  1. <?php
  2. /**
  3.  * htf_com_func.inc
  4.  *
  5.  * HTF共通関数保有ファイル
  6.  *
  7.  * @package HtmlTemplateFramework
  8.  * @subpackage common
  9.  * @access  public
  10.  * @author    Yamauchi Shogo <htf@as-prj.com>
  11.  * @version $Id: htf_com_func.inc ,v 1.0 $;
  12.  ***/
  13.  
  14. require_once("htf_com_define.inc");    //共通定数
  15.  
  16. /**
  17.  * xmlの要素名が比較する要素名と合致するかどうかを返します。
  18.  * htfでは、大文字・小文字を意識しないで比較します。
  19.  * 
  20.  * @access     public
  21.  * @param     string    $elemname  判別する要素名
  22.  * @param     string    $compstr   判別に使用する基準要素名
  23.  * @return    bool 
  24.  ***/
  25. function htf_comp_xmlelementname($elemname$compstr{
  26.     $strnamewk="";
  27.     $strcompwk="";
  28.     
  29.     //引数値チェック
  30.     if (htf_is_existsval($elemname)) {
  31.         $strnamewk=$elemname;
  32.     else {
  33.         //NULLと空文字は空文字
  34.         $strnamewk="";
  35.     }
  36.     if (htf_is_existsval($compstr)) {
  37.         $strcompwk=$compstr;
  38.     else {
  39.         //NULLと空文字は空文字
  40.         $strcompwk="";
  41.     }
  42.     //コンペア(大文字・小文字を意識しない)
  43.     if (!strcasecmp($elemname$compstr)) {
  44.         return TRUE;
  45.     else {
  46.         return FALSE;
  47.     }
  48. }
  49.  
  50. /**
  51.  * xmlの属性名が比較する属性名と合致するかどうかを返します。
  52.  * htfでは、大文字・小文字を意識しないで比較します。
  53.  * 
  54.  * @access     public
  55.  * @param     string    $attrname  判別する属性名
  56.  * @param     string    $compstr   判別に使用する基準属性名
  57.  * @return    bool 
  58.  ***/
  59. function htf_comp_xmlattrname($attrname$compstr{
  60.     $strnamewk="";
  61.     $strcompwk="";
  62.     
  63.     //引数値チェック
  64.     if (htf_is_existsval($attrname)) {
  65.         $strnamewk=$attrname;
  66.     else {
  67.         //NULLと空文字は空文字
  68.         $strnamewk="";
  69.     }
  70.     if (htf_is_existsval($compstr)) {
  71.         $strcompwk=$compstr;
  72.     else {
  73.         //NULLと空文字は空文字
  74.         $strcompwk="";
  75.     }
  76.     //コンペア(大文字・小文字を意識しない)
  77.     if (!strcasecmp($attrname$compstr)) {
  78.         return TRUE;
  79.     else {
  80.         return FALSE;
  81.     }
  82. }
  83.  
  84. /**
  85.  * xmlの属性値が比較する属性値と合致するかどうかを返します。
  86.  * htfでは、大文字・小文字を意識しないで比較します。
  87.  * 
  88.  * @access     public
  89.  * @param     string    $attrvalue  判別する属性値
  90.  * @param     string    $compstr    判別に使用する基準属性値
  91.  * @return    bool 
  92.  ***/
  93. function htf_comp_property($attrvalue$compstr{
  94.     $strvaluewk="";
  95.     $strcompwk="";
  96.     
  97.     //引数値チェック
  98.     if (htf_is_existsval($attrvalue)) {
  99.         $strvaluewk=$attrvalue;
  100.     else {
  101.         //NULLと空文字は空文字
  102.         $strvaluewk="";
  103.     }
  104.     if (htf_is_existsval($compstr)) {
  105.         $strcompwk=$compstr;
  106.     else {
  107.         //NULLと空文字は空文字
  108.         $strcompwk="";
  109.     }
  110.     //コンペア(大文字・小文字を意識しない)
  111.     if (!strcasecmp($attrvalue$compstr)) {
  112.         return TRUE;
  113.     else {
  114.         return FALSE;
  115.     }
  116. }
  117.  
  118. /**
  119.  * 値がhtfで使用できる値かどうかを返します。
  120.  * NULL値や空文字の場合はfalseを返します。
  121.  * 
  122.  * @access     public
  123.  * @param     mixed     $propval 
  124.  * @param     string    $compstr    判別に使用する基準属性値
  125.  * @return    bool 
  126.  ***/
  127. function htf_is_existsval($propval{
  128.     if (is_null($propval)) {
  129.         //NULLはFALSE
  130.         return FALSE;
  131.     else if (is_string($propval&& $propval == ""{
  132.         //空文字はFALSE(文字型の場合のみ)
  133.         return FALSE;
  134.     }
  135.     return TRUE;
  136. }
  137.  
  138. /**
  139.  * 引数文字列の最終文字が改行コードかどうかを判別し、
  140.  * 改行コードでない場合には改行コードを付加します。
  141.  * NULL値は空文字の場合には改行コードは付加しません。
  142.  * 
  143.  * @access     public
  144.  * @param     string    $stradd   改行コードを追加する文字列
  145.  * @return    string 
  146.  ***/
  147. function htf_add_cr($stradd{
  148.     //NULLや空文字は空文字を返す
  149.     if (!htf_is_existsval($stradd)) {
  150.         return "";
  151.     }
  152.     //最終文字が改行コードかどうかチェックして返す
  153.     if (strrchr($stradd,"\n"== "\n"{
  154.         $strret $stradd;
  155.     else {
  156.         $strret $stradd."\n";
  157.     }
  158.     return $strret;
  159. }
  160.  
  161. /**
  162.  * 開始行コメント文字列を作成します。
  163.  * 
  164.  * @access     public
  165.  * @param     string    $strareaname  コメント文字列に組み込むエリア名
  166.  * @return    string 
  167.  ***/
  168. function htf_get_comment_areastart($strareaname=""{
  169.     $strret "";
  170.     if(htf_is_existsval($strareaname)) {
  171.         $strret '<!-- '.$strareaname.' start -->';
  172.     else {
  173.         $strret "<!-- start -->";
  174.     }
  175.     $strret htf_add_cr($strret);
  176.     return $strret;
  177. }
  178.  
  179. /**
  180.  * 終了行コメント文字列を作成します。
  181.  * 
  182.  * @access     public
  183.  * @param     string    $strareaname  コメント文字列に組み込むエリア名
  184.  * @return    string 
  185.  ***/
  186. function htf_get_comment_areaend($strareaname=""{
  187.     $strret "";
  188.     if(htf_is_existsval($strareaname)) {
  189.         $strret '<!-- '.$strareaname.' end -->';
  190.     else {
  191.         $strret '<!-- end -->';
  192.     }
  193.     $strret htf_add_cr($strret);
  194.     return $strret;
  195. }
  196.  
  197. //////////////////////////////////////
  198. //URL操作関数
  199. //////////////////////////////////////
  200. /**
  201.  * ルートURLとそれ以下を結合し、URL絶対パスを生成する。
  202.  * ルートURLの最後の文字・子URLの先頭文字は、'/'
  203.  * であるかどうかを判別して結合する。
  204.  * 
  205.  * @access     public
  206.  * @param     string    $strroot  ルートURL
  207.  * @param     string    $strchild ルート以下の子URL
  208.  * @return    string 
  209.  ***/
  210. function htf_make_url($strroot$strchild{
  211.     if (!htf_is_existsval($strroot)) {
  212.         //rootが指定なし
  213.         return htf_nz($strchild"");
  214.     elseif (!htf_is_existsval($strchild)) {
  215.         //childが指定なし
  216.         return $strroot;
  217.     }
  218.     
  219.     //セパレータをつけるかどうか判断して絶対パスを作成して返す
  220.     if (substr($strroot,strlen($strroot)-1,1== "/"{
  221.         if (substr($strchild01== "/"{
  222.             //ルートの最後が'/'かつ子の先頭も'/'の場合
  223.             return substr($strroot0strlen($strroot)-1).$strchild;
  224.         else {
  225.             //ルートの最後が'/'かつ子の先頭は'/'でない場合
  226.             return $strroot.$strchild;
  227.         }
  228.     else {
  229.         if (substr($strchild01== "/"{
  230.             //ルートの最後が'/'でなく、かつ子の先頭が'/'の場合
  231.             return $strroot.$strchild;
  232.         else {
  233.             //ルートの最後が'/'でなく、かつ子の先頭も'/'でない場合
  234.             return $strroot."/".$strchild;
  235.         }
  236.     }
  237. }
  238.  
  239. //////////////////////////////////////
  240. //ファイルシステム操作関数
  241. //////////////////////////////////////
  242. /**
  243.  * ディレクトリ名とファイル名を結合し、ファイルシステム上の絶対パスを生成します。
  244.  * ディレクトリ名のの最後の文字はファイル区切り文字であるかどうかを判別して結合します。
  245.  * 
  246.  * @access     public
  247.  * @param     string    $strdir   ディレクトリ名
  248.  * @param     string    $strchild ファイル名
  249.  * @return    string 
  250.  ***/
  251. function htf_make_fullpathname($strdir$strfname{
  252.     //引数がNULL・空文字時は空文字を返す
  253.     if (!htf_is_existsval($strdir|| !htf_is_existsval($strfname)) {
  254.         return "";
  255.     }
  256.     //セパレータをつけるかどうか判断して絶対パスを作成して返す
  257.     if (substr($strdir,strlen($strdir)-1,1== DIRECTORY_SEPARATOR{
  258.         return $strdir.$strfname;
  259.     else {
  260.         return $strdir.DIRECTORY_SEPARATOR.$strfname;
  261.     }
  262. }
  263.  
  264. /**
  265.  * PHP環境設定値のinclude_path内容を引数に指定した配列に取得します。
  266.  * 
  267.  * @access     public
  268.  * @param     array     $arset  include_path内容設定配列
  269.  * @return    void 
  270.  ***/
  271. function htf_get_incdirarray(&$arset{
  272.     $strincpath get_include_path();
  273.     $pos=0;
  274.     $i=0;
  275.     while($pos<strlen($strincpath&& !is_bool($pos)) {
  276.         $poswk strpos($strincpath,PATH_SEPARATOR,$pos+1);
  277.         if (!is_bool($poswk)) {
  278.             $arset[$isubstr($strincpath,$pos,$poswk-$pos);
  279.             $pos=$poswk+1;
  280.         else {
  281.             $arset[$isubstr($strincpath,$pos);
  282.             return;
  283.         }
  284.         $i++;
  285.     }
  286. }
  287.  
  288. /**
  289.  * 引数文字列の最終文字がファイル区切り文字の場合、
  290.  * 最後のファイル区切り文字を削除した文字列を返します。
  291.  * 
  292.  * @access     public
  293.  * @param     string     $strdir  ディレクトリ名
  294.  * @return    string 
  295.  ***/
  296. function htf_cut_dirseparator($strdir{
  297.     $strret="";
  298.     //引数がNULL・空文字時は空文字を返す
  299.     if (!htf_is_existsval($strdir)) {
  300.         return "";
  301.     }
  302.     //セパレータ削除を判断して返す
  303.     if ($strdir == DIRECTORY_SEPARATOR{
  304.         $strret $strdir;
  305.     else if (substr($strdir,strlen($strdir)-1,1== DIRECTORY_SEPARATOR{
  306.         $strret substr($strdir,0,strlen($strdir)-1);
  307.     else {
  308.         $strret $strdir;
  309.     }
  310.     return $strret;
  311. }
  312.  
  313. /**
  314.  * 引数ディレクトリ文字列の一つ上のディレクトリ名を返します。
  315.  * 引数ディレクトリがドキュメントルートや、ルートディレクトリを
  316.  * あらわしている場合には、空文字を返します。
  317.  * 
  318.  * @access     public
  319.  * @param     string     $strdir  ディレクトリ名
  320.  * @return    string 
  321.  ***/
  322. function htf_get_parentdir($strdir{
  323.     $strrootdir="";
  324.     $strdirwk="";
  325.     $numpos=0;
  326.     $strret="";
  327.  
  328.     /////////////////////////////////////////////////////////
  329.     //引数のディレクトリとドキュメントルートの形式をあわせる
  330.     /////////////////////////////////////////////////////////
  331.     //最後尾のディレクトリセパレータをカット
  332.     $strdirwk htf_cut_dirseparator($strdir);
  333.     //ドキュメントルートのセパレータを変換して最後尾をカット
  334.     $strdirsep DIRECTORY_SEPARATOR;
  335.     $strrootdir $_SERVER["DOCUMENT_ROOT"];
  336.     if (!strncasecmp(substr(PHP_OS,0,3),'win',3)) {
  337.         $strrootdir  str_replace('/',$strdirsep,$strrootdir);
  338.     }
  339.     $strrootdir htf_cut_dirseparator($strrootdir);
  340.     /////////////////////////////////////////////////////////
  341.     //ドキュメントルートと同じ場合はそこで終了
  342.     /////////////////////////////////////////////////////////
  343.     if (!strcasecmp($strrootdir ,$strdirwk)) {
  344.         return "";
  345.     }
  346.     /////////////////////////////////////////////////////////
  347.     //親ディレクトリの名称を作成
  348.     /////////////////////////////////////////////////////////
  349.     $numpos strrpos($strdirwk$strdirsep);
  350.     if (is_bool($numpos)) {
  351.         //エラーの場合
  352.         return "";
  353.     else if ($numpos == 0{
  354.         //先頭が見つかった場合
  355.         if ($strdir == $strdirsep{
  356.             //先頭が渡されていた場合
  357.             return "";
  358.         else {
  359.             //本当に一つ上がルートだった場合
  360.             return substr($strdirwk,0,1);
  361.         }
  362.     else if ($numpos >= 0{
  363.         //その他見つかった場合
  364.         return substr($strdirwk,0,$numpos);
  365.     }
  366. }
  367.  
  368. /**
  369.  * 指定ファイル名でインクルードパスをサーチし、
  370.  * 存在する場合には絶対パスを返します。
  371.  * 存在しない場合には空文字を返します。
  372.  * 
  373.  * @access     public
  374.  * @param     string     $strfname  ファイル名
  375.  * @return    string 
  376.  ***/
  377. function htf_get_fileincludepath($strfname{
  378.     $ardir=array();
  379.     $strret htf_get_incdirarray($ardir);
  380.     for ($i=0;$i<count($ardir);$i++{
  381.         $strfret htf_make_fullpathname($ardir[$i]$strfname);
  382.         if (file_exists($strfret)) {
  383.             return $strfret;
  384.         }
  385.     }
  386.     return "";
  387. }
  388.  
  389.  
  390. /**
  391.  * 指定ファイル名で指定ディレクトリの上位を検索し、
  392.  * 存在する場合には絶対パスを返します。
  393.  * 存在しない場合には空文字を返します。
  394.  * 上位ディレクトリにドキュメントルートが存在する場合には、
  395.  * ドキュメントルートまでで検索を終了します。
  396.  * 
  397.  * @access     public
  398.  * @param     string     $strcwd  ディレクトリ名
  399.  * @param     string     $strfname  ファイル名
  400.  * @return    string 
  401.  ***/
  402. function htf_get_filepath($strcwd$strfname{
  403.     $strcwd_wk="";
  404.     $strfret="";
  405.     
  406.     //引数チェック
  407.     if (!htf_is_existsval($strcwd|| !htf_is_existsval($strfname)) {
  408.         return "";
  409.     }
  410.     
  411.     //初期値のフルパス名作成
  412.     $strcwd_wk $strcwd;
  413.     $strfret htf_make_fullpathname($strcwd_wk$strfname);
  414.     //カレントディレクトリに存在した
  415.     if (file_exists($strfret)) {
  416.         return $strfret;
  417.     }
  418.  
  419.     //上位ディレクトリを順にサーチ
  420.     while ($strcwd_wk != ""{
  421.         //親ディレクトリ名を取得する
  422.         $strcwd_wk htf_get_parentdir($strcwd_wk);
  423.         if ($strcwd_wk == ""{
  424.             return "";
  425.         }
  426.         $strfret htf_make_fullpathname($strcwd_wk$strfname);
  427.         if (file_exists($strfret)) {
  428.             return $strfret;
  429.         }
  430.     }
  431. }
  432.  
  433. /**
  434.  * 指定ファイル名で指定ディレクトリの上位を検索し、
  435.  * 存在する場合には指定ディレクトリからの相対パスを返します。
  436.  * 存在しない場合には空文字を返します。
  437.  * 上位ディレクトリにドキュメントルートが存在する場合には、
  438.  * ドキュメントルートで検索を終了します。
  439.  * 
  440.  * @access     public
  441.  * @param     string     $strcwd  ディレクトリ名
  442.  * @param     string     $strfname  ファイル名
  443.  * @return    string 
  444.  ***/
  445. function htf_get_filepath_relative($strcwd$strfname{
  446.     $strcwd_wk="";
  447.     $strfull="";
  448.     $strfret="";
  449.     
  450.     //引数チェック
  451.     if (!htf_is_existsval($strcwd|| !htf_is_existsval($strfname)) {
  452.         return "";
  453.     }
  454.  
  455.     //初期値のフルパス名作成
  456.     $strcwd_wk $strcwd;
  457.     $strfull htf_make_fullpathname($strcwd_wk$strfname);
  458.     //カレントディレクトリに存在した
  459.     if (file_exists($strfull)) {
  460.         return $strfname;
  461.     }
  462.  
  463.     //上位ディレクトリを順にサーチ
  464.     while ($strcwd_wk != ""{
  465.         //親ディレクトリ名を取得する
  466.         $strcwd_wk htf_get_parentdir($strcwd_wk);
  467.         if ($strcwd_wk == ""{
  468.             return "";
  469.         }
  470.         $strfull htf_make_fullpathname($strcwd_wk$strfname);
  471.         $strfret.="..".DIRECTORY_SEPARATOR;
  472.         if (file_exists($strfull)) {
  473.             return $strfret.=$strfname;
  474.         }
  475.     }
  476. }
  477.  
  478. /**
  479.  * 指定ファイル名の拡張子を指定拡張子にて変更します。
  480.  * 拡張子を引数指定しない場合には、拡張子が削除されます。
  481.  * 
  482.  * @access     public
  483.  * @param     string     $strfname  ファイル名
  484.  * @param     string     $strext    拡張子名
  485.  * @return    string 
  486.  ***/
  487. function htf_change_ext($strfname$strext=""{
  488.     //引数チェック
  489.     if (!htf_is_existsval($strfname)) {
  490.         return "";
  491.     }
  492.     //後方から最初の.を探す
  493.     $pos=strrpos($strfname,'.');
  494.     if (!$pos{
  495.         //見つからなかった場合はそのまま
  496.         $strnoext=$strfname;
  497.     else {
  498.         //見つかった場合はファイル名を切り出し
  499.         $strnoext=substr($strfname,0,$pos);
  500.     }
  501.     //ファイル名作成
  502.     $strret=$strnoext;
  503.     if (htf_is_existsval($strext)) {
  504.         $strret.='.';
  505.         $strret.=$strext;
  506.     }
  507.     
  508.     return $strret;
  509.  
  510. }
  511.  
  512. //////////////////////////////////////
  513. //その他
  514. //////////////////////////////////////
  515. /**
  516.  * 指定値がNULLだった場合に指定代替値を返し、NULL値を回避します。
  517.  * 
  518.  * @access     public
  519.  * @param     mixed     $chkparam  NULL値をチェックするパラメータ
  520.  * @param     mixed     $altval    NULLだった場合に返す代替値
  521.  * @return    mixed 
  522.  ***/
  523. function htf_nz($chkparam$altval{
  524.     if (is_null($chkparam)) {
  525.         return $altval;
  526.     else {
  527.         return $chkparam;
  528.     }
  529. }
  530.  
  531. /**
  532.  * 指定した文字列を指定したデリミタで配列に分解します。
  533.  * 
  534.  * @access     public
  535.  * @param     string    $strsplit  分解する文字列
  536.  * @param     string    $strdelim  判別するデリミタ
  537.  * @return    array 
  538.  ***/
  539. function htf_split_arr($strsplit$strdelim{
  540.     //引数チェック
  541.     if (!htf_is_existsval($strsplit)) {
  542.         return NULL;
  543.     }
  544.     //配列に分解
  545.     $arr_ret NULL;
  546.     $arr_ret[0strtok($strsplit$strdelim);
  547.     $i 1;
  548.     while($strval=strtok($strdelim)){
  549.         $arr_ret[$i$strval;
  550.         $i++;
  551.     }
  552.     return $arr_ret;
  553. }
  554.  
  555. /**
  556.  * イメージ名をジェネレートします。
  557.  * 
  558.  * @access     public
  559.  * @return    string 
  560.  ***/
  561. function htf_gen_imgname({
  562.     static $gencnt;
  563.     
  564.     $gencnt+=1;
  565.     return 'imgname_'.$gencnt;
  566. }
  567.  
  568. /**
  569.  * アンカーリンクタグを生成します。
  570.  * 
  571.  * @access     public
  572.  * @param     string    $url  リンク先のURL
  573.  * @param     string    $disp 表示文字列
  574.  * @return    string 
  575.  ***/
  576. function htf_printphplink($url$disp)
  577. {
  578.     print('<a href="'.$url.'">'.$disp.'</a>');
  579. }
  580.  
  581. /**
  582.  * 属性指定付きアンカーリンクタグを生成します。
  583.  * 
  584.  * @access     public
  585.  * @param     string    $url  リンク先のURL
  586.  * @param     string    $disp 表示文字列
  587.  * @param     string    $opt  属性指定文字列
  588.  * @return    string 
  589.  ***/
  590. function htf_printphplink2($url$disp$opt)
  591. {
  592.     if ($opt == NULL || $opt == ""{
  593.         print('<a href="'.$url.'">'.$disp.'</a>');
  594.     else {
  595.         print('<a href="'.$url.'" '.$opt.'>'.$disp.'</a>');
  596.     }
  597. }
  598. ?>

Documentation generated on Tue, 19 Sep 2006 06:20:37 +0900 by phpDocumentor 1.3.0