<p>setCookie</p> <script> function setCookie(c_name,value,expiredays){ var path = location.pathname; var paths = new Array(); paths = path.split("/"); if(paths[paths.length-1] != ""){ paths[paths.length-1] = ""; path = paths.join("/"); } var extime = new Date().getTime(); var cltime = new Date(extime + (60*60*24*1000*expiredays)); var exdate = cltime.toUTCString(); var s = ""; s += c_name +"="+ escape(value); s += "; path="+path; if(expiredays){ s += "; expires=" +exdate+"; "; } else { s += "; "; } document.cookie = s; } window.onload = setCookie('test', 'sample', 7); </script>
Category: PHP
ページングに合わせたコンテンツ表示
<style> .current{ font-weight: bold; } </style> <?php $logdata = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"); $count = count($logdata); $max = 5; $limit = ceil($count/$max); $page = empty($_GET["page"])? 1: $_GET["page"]; $pstart = ($page == 1)? 0: ($page-1)* $max; $pend = ($page * $max); print"<p>"; for($i=$pstart;$i<$pend;$i++){ if($i >= $count){break;} print $logdata[$i]." "; } print "</p>"; $page = empty($_GET["page"])? 1:$_GET["page"]; $disp=3; $next = $page+1; $prev = $page-1; $start = ($page-floor($disp / 2) > 0) ? ($page-floor($disp/2)) : 1; $end = ($start > 1) ? ($page+floor($disp/2)) : $disp; //55 $start = ($limit < $end) ? $start-($end-$limit):$start; if($page != 1 ) { print '<a href="?page='.$prev.'">« 前へ</a> '; } if(($page - $disp) > 0 | $page == $disp){ if($start >= floor($disp/2)){ print '<a href="?page=1">1</a>'; if($start > floor($disp/2) and $page != $disp){ print "..."; } if($page == $disp){ print " "; } } } for($i=$start; $i <= $end ; $i++){ $class = ($page == $i) ? ' class="current"':""; if($i <= $limit && $i > 0 ) print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a> '; } if($limit > $end){ if($limit - 1 > $end) print "..."; print '<a href="?page='.$limit.'">'.$limit.'</a>'; } if($page < $limit){ print ' <a href="?page='.$next.'">次へ »</a>'; } ?>
想像してたより、早かった。
次へ前へのページング
<?php $page = empty($_GET["page"])? 1:$_GET["page"]; function paging($page,$disp=5){ $limit = 10; $page = empty($_GET["page"])? 1: $_GET["page"]; $next = $page+1; $prev = $page-1; if($page != 1){ echo '<a href="?page='.$prev.'">« 前へ</a>'; } if($page < $limit){ echo ' <a href="?page='.$next.'">次へ »</a>'; } // print "current:".$page."<br>"; // print "next:".$next."<br>"; // print "prev:".$prev."<br>"; } echo paging(); ?>
GETパラメーターで複数ページを表示
例えば、60個のデータを1ページ20個まで表示すると考えた場合、
$_GET[“param”]で、パラメーターの値を取得して、条件分岐で表示できる。
<?php $data = 60; $per_show = 20; $page_count = (int)(($data -1) / $per_show) +1; // echo $page_count; echo $page_count . "ページまであります。<br>"; $param = (int)$_GET["page"]; if($param){ if($page_count >= $param){ echo $param . "ページ目です。"; } } ?>
なるほど、こういうことか。
ページングを足してみます。
<?php $data = 70; $per_show = 20; $page_count = (int)(($data -1) / $per_show) +1; // echo $page_count; echo $page_count . "ページまであります。<br>"; $param = (int)$_GET["page"]; if($param){ if($page_count >= $param){ echo $param . "ページ目です。<br>"; } } echo "<br>"; for($i=0; $i< $page_count; $i++){ $page = $i + 1; echo "<a href=\"?page=".$page."\">".$page."</a> "; } ?>
うひょー
php5以上でCall to undefined function domxml_new_doc()
domxml_new_docがundefinedと出てしまった。
[vagrant@localhost map]$ php -v
PHP 5.6.27 (cli) (built: Oct 14 2016 14:06:54)
phpのversionは、5.6
php4.0からサポートされているのに何で?と思ったが、以下のようにphp5以上はDOM extensionを使えとのこと。
It will, however, never be released with PHP 5, and will only be distributed with PHP 4. If you need DOM XML support with PHP 5 you can use the DOM extension. This domxml extension is not compatible with the DOM extension.
こちらのDom Object Model
http://us3.php.net/manual/ja/book.dom.php
new DOMDocument(), createElement, appendChild, setAttribute, saveXMLに修正したら問題なく表示されました。
<?php require("phpsqlajax_dbinfo.php"); $doc = new DOMDocument("1.0"); $node = $doc->createElement("makers"); $parnode = $doc->appendChild($node); $connection =mysql_connect('localhost', $username, $password); if (!$connection){ die('Not connected : ' . mysql_error()); } $db_selected = mysql_select_db($database, $connection); if (!$db_selected){ die ('Can\'t use db:' . mysql_error()); } $query = "SELECT * FROM markers WHERE 1"; $result = mysql_query($query); if(!$result){ die('Invalid query:' . mysql_error()); } header("Content-type: text/xml"); while ($row = @mysql_fetch_assoc($result)){ $node = $doc->createElement("marker"); $newnode = $parnode->appendChild($node); $newnode->setAttribute("name", $row['address']); $newnode->setAttribute("lat", $row['lat']); $newnode->setAttribute("lng", $row['lng']); $newnode->setAttribute("type", $row['type']); } $xmlfile = $doc->saveXML(); echo $xmlfile; ?>
<makers> <marker name="580 Darling Street, Rozelle, NSW" lat="-33.861034" lng="151.171936" type="restaurant"/> <marker name="76 Wilford Street, Newtown, NSW" lat="-33.898113" lng="151.174469" type="bar"/> <marker name="Greenwood Plaza, 36 Blue St, North Sydney NSW" lat="-33.840282" lng="151.207474" type="bar"/> <marker name="7A, 2 Huntley Street, Alexandria, NSW" lat="-33.910751" lng="151.194168" type="bar"/> <marker name="16 Foster Street, Surry Hills, NSW" lat="-33.879917" lng="151.210449" type="bar"/> <marker name="43 Macpherson Street, Bronte, NSW" lat="-33.906357" lng="151.263763" type="restaurant"/> <marker name="60-64 Reservoir Street, Surry Hills, NSW" lat="-33.881123" lng="151.209656" type="restaurant"/> <marker name="60 Riley Street, Darlinghurst, NSW" lat="-33.874737" lng="151.215530" type="restaurant"/> </makers>
foreach, endforeach
foreach文は、{}を:、endforeachに変更できる。
連想配列のforeach入れ子でも同じですね。
<?php $investment = array( 'us' => array('ADARA','BIRDEYE','ClearMotion'), 'japan' => array('ombie', 'caster', 'Cloud Ace', 'GHELIA') ); foreach($investment as $contry => $company) : foreach ($company as $value) : echo $contry .' : '. $value. '<br>'; endforeach; endforeach; ?>
us : ADARA
us : BIRDEYE
us : ClearMotion
japan : ombie
japan : caster
japan : Cloud Ace
japan : GHELIA
以下のように、endforeach;が1回だとエラーになります。
<?php $investment = array( 'us' => array('ADARA','BIRDEYE','ClearMotion'), 'japan' => array('ombie', 'caster', 'Cloud Ace', 'GHELIA') ); foreach($investment as $contry => $company) : foreach ($company as $value) : echo $contry .' : '. $value. '<br>'; endforeach; echo 'endforeachを1回';
hash_hmac
HMAC方式を使用して、ハッシュ値を生成
string hash_hmac($algo, $data, $key)
$algo:アルゴリズムの名前 “md5″、”sha256″、”haval160,4” など…
$key;HMAC 方式でのメッセージダイジェストを生成するために使用する 共有の秘密鍵。
サンプル
<?php $str = "パスワード"; echo hash_hmac('md5', $str, 'secret') . "<br>"; echo hash_hmac('sha256', $str, 'secret') . "<br>"; echo hash_hmac('haval160,4', $str, 'secret') . "<br>"; ?>
さくらのphp-mecabをインストールする際に嵌ってしまった
mecabはphp7.0とphp5.*では、クラスの書き方が異なります。
例:MeCab_Tagger
例:\MeCab\Tagger
その為、git-cloneもしくはwgetでファイルを取得して展開した後に、以下のようにコンパイルするかと思いますが、./configureで、phpのバージョンを指定する必要があります。
phpize ./configure make make install
configureでphp-configとmecab-configを指定しますが、さくらの場合、php-configをphpのバージョンごとにディレクトリを分けて管理されている為、利用しているバージョンのディレクトリを指定して、configureしなければなりません。
./configure --with-php-config=/usr/local/php/5.6/bin/php-config --with-mecab=/usr/local/bin/mecab-config
上記は5.6ですが、phpinfoで確認できます。
これを解決するのに、5時間ぐらい調べて何度も試していました。馬鹿ですね。
local storage にkey valueを保存
<script type="text/javascript"> if(typeof localStorage == 'undefined'){ document.write("<p>お使いのブラウザではお気に入り機能が使えません。</p>"); } else { var storage = localStorage; function setlocalStorage(){ var key = document.getElementById("textkey").value; var value = document.getElementById("textdata").value; if (key && value){ storage.setItem(key, value); } key = ""; value = ""; viewStorage(); } function removeStorage(){ var key = document.getElementById("textkey").value; storage.removeItem(key); key = ""; viewStorage(); } function removeallStorage(){ storage.clear(); viewStorage(); } function viewStorage() { var list = document.getElementById("list") while(list.firstChild)list.removeChild(list.firstChild); for (var i=0; i < storage.length; i++){ var _key = storage.key(i); var tr = document.createElement("tr"); var td1 = document.createElement("td"); var td2 = document.createElement("td"); list.appendChild(tr); tr.appendChild(td1); tr.appendChild(td2); td1.innerHTML = _key; td2.innerHTML = storage.getItem(_key); } } function load(){ var list = document.getElementById("list") while (list.firstChild) list.removeChild(list.firstChild); for (var i =0; i < localStorage.length; i++){ var _key = localStorage.key(i); var tr = document.createElement("tr"); var td1 = document.createElement("td"); var td2 = document.createElement("td"); list.appendChild(tr); tr.appendChild(td1); tr.appendChild(td2); td1.innerHTML = _key; td2.innerHTML = localStorage.getItem(_key); } } } </script> <h4>お気に入り銘柄入力フィールド</h4> <p> code : <input id="textkey" type="text"/> 銘柄名:<input id="textdata" type="text"/></p> <p align="right"><button id="button" onclick="setlocalStorage()">保存</button> <button id="button" onclick="removeStorage()">削除</button> <button id="button" onclick="removeallStorage()">全て削除</button></p> <h4>入力結果</h4> <table class="tagForList2"> <tr> <th>コード</th><th>銘柄名</th> </tr> <tbody id="list"> </tbody> </table>
グローバルスコープとローカルスコープ
globalでロカールスコープの変数をグローバルでも使えるようにします。
<?php function sell($name){ $code = "8411"; echo $name."さんは" .$code."を空売りしています。"; } sell('Barclays Bank'); echo $code. "は、出来高の多い銘柄です。" ?>
Barclays Bankさんは8411を空売りしています。は、出来高の多い銘柄です。
globalで宣言します。
<?php function sell($name){ global $code; $code = "8411"; echo $name."さんは" .$code."を空売りしています。"; } sell('Barclays Bank'); echo $code. "は、出来高の多い銘柄です。" ?>
Barclays Bankさんは8411を空売りしています。8411は、出来高の多い銘柄です。