uniqid という単純な関数で取得できます。 結果例 : 4a60afd294c67 これは、マイクロ秒( 100万分の1秒 ) を元にしているらしいので、十分にユニークです。ほぼこれ以上を気にする必要はありません。 マニュアルには、第一引数の説明として、prefix というものがありますが、これは複数のサーバで同時に実行される場合同じになる可能性が( ほんのほんの少しだけ、殆ど無い ) あるので用意されているだけで、同一サーバの同一処理系で利用しても意味ありません。 また、第二引数としてさらにユニークにするオプションがあります。 実行例 : print uniqid("",true); 結果例 : 4a60b0dd16e413.58317420
2019年08月26日
PHP : ユニークなキーの取得
2017年04月15日
PHP で漢字スペースと通常スペースのトリムとPHP正規表現チェッカー(置き換え)
※ 昔使っていた『PHP正規表現チェッカー』のサイトが閉鎖されたので他のサイトに変更しました PHP では trim と言う関数で、文字列の先頭および末尾にあるホワイトスペースを取り除く事ができますが、デフォルトでは以下の文字を削除します。" " (ASCII 32 (0x20)), 通常の空白。 "\t" (ASCII 9 (0x09)), タブ。 "\n" (ASCII 10 (0x0A)), リターン。 "\r" (ASCII 13 (0x0D)), 改行。 "\0" (ASCII 0 (0x00)), NULバイト "\x0B" (ASCII 11 (0x0B)), 垂直タブで、日本語スペースはこのままでは削除してくれないので、追加してみると普通に削除してくれました。 Run Code で実行
<?php $kj = "漢字表示"; $kj_space = " "; $a_space = " "; $str = "{$kj_space}{$a_space}{$kj}{$kj_space}{$a_space}"; $str = trim($str, "{$a_space}\t\n\r\0\x0B{$kj_space}"); print "|{$str}|"; ?>
また、同様の結果を preg_replace で得る方法もテストしてみました。この場合重要なのは、パターン修飾子 の "u" でした。(パターンと対象文字列は、 UTF-8 として処理されます) Run Code で実行
<?php $kj = "漢字表示"; $kj_space = " "; $a_space = " "; $str = "{$kj_space}{$a_space}{$kj}{$kj_space}{$a_space}"; $str = preg_replace( "/^[ \s]+/u", "", $str ); $str = preg_replace( "/[ \s]+$/u", "", $str ); print "|{$str}|"; ?>
また、正規表現のパーターンを一つにして一回で置換する場合は以下のようになります
<?php $kj = "漢字表示"; $kj_space = " "; $a_space = " "; $str = "{$kj_space}{$a_space}{$kj}{$kj_space}{$a_space}"; $str = preg_replace( "/^[ \s]+|[ \s]+$/u", "", $str ); print "|{$str}|"; ?>
この場合、重要なのは | を使った構文です 確認は、PHP正規表現チェッカー(置き換え) で解りやすく行う事ができます ▼ パターン文字列は ^[ \s]+|[ \s]+$ PHP正規表現チェッカーで デベロッパーツールを F12 で開いて(コンソール) 以下を実行できます。
$("input[name='pattern").val("^[ \\s]+|[ \\s]+$");$("input[name='replacement']").val("削除");$("#subject").val(" 漢字表示 ");$('#preg_replace').keyup();
※ このサイトでは、jQuery が使用されています
2016年05月05日
PHP で HTML数値エンティティを、目的のキャラクタセットの文字列に変換する
テキストエディタが優秀な場合は、直接ソースに書いてもいいのですが、古いエディタだと UTF-8 の文字列を直接書けない場合もあります。もちろん、数値データから文字列化する処理に有効ですが、マニュアルには肝心の『変換するコード領域を指定する配列』の説明がありません 以下は簡単なサンプルですが、0x2A6D5 のほうは変換されず、0x2A6D6 のほうは変換されます。
$convmap = array(0x0, 0x2A6D5, 0, 0xFFFFF); $wk = mb_decode_numericentity("𪛖", $convmap, 'UTF-8'); print $wk; $convmap = array(0x0, 0x2A6D6, 0, 0xFFFFF); $wk = mb_decode_numericentity("𪛖", $convmap, 'UTF-8'); print $wk;
0x0 から 0x2A6D6 の範囲のみ変換します。0 はオフセットなので通常は 0 として使いません( 0x2A6D5 では、1 にすれば変換対象になります )。最後の 0xFFFFF はマスクなので、そのまま利用するという意味で全てのフラグが on である 0xFFFFF を使用しています 0x2A6D6 の漢字に関しては、こちらより確認して下さい 𪛖
タグ:PHP
2015年11月02日
PHP : $_GET、$_POST、$_SESSION とグローバル変数全ての簡単な表示方法
$GLOBALS はスーパーグローバル変数を含む、ほぼ全てのグローバル変数を保持しています。そこで、print_r で取得できる内容から、正規表現で $_COOKIE と $_FILES を削除したものを表示しています。 ※ 同時に get_include_path で、現在の include_path をパス単位で表示しています
<?php $debug_string = print_r($GLOBALS,true); $debug_string = preg_replace('/\n\s+\[_[C|F].+?\)/s', '', $debug_string); print "<br><br><hr>"; print "<pre style='font-weight:bold;white-space:pre-wrap;'>"; print $debug_string; print "--------------------------------------\n"; print_r( explode(PATH_SEPARATOR,get_include_path()) ); print "</pre>"; ?>
print_r は、このように出力結果を文字列として戻す事ができるので、デバッグ時にファイルに出力するのに有効です
▼ 表示結果の例( windows )
Array
(
[_GET] => Array
(
[update_type] => 1
[syain] => 0053
[order] => 氏名
)
[_POST] => Array
(
)
[rpath] => C:\httpd142p\if_skeleton\lightbox99\
[_SESSION] => Array
(
[charset] => utf-8
[iframe_id] => target
)
[server] => localhost
[db_name] => lightbox
[user] => root
[password] => パスワード
[connect] => mysqli Object
(
[affected_rows] => 5
[client_info] => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
[client_version] => 50010
[connect_errno] => 0
[connect_error] =>
[errno] => 0
[error] =>
[error_list] => Array
(
)
[field_count] => 12
[host_info] => localhost via TCP/IP
[info] =>
[insert_id] => 0
[server_info] => 5.6.17
[server_version] => 50617
[stat] => Uptime: 15857 Threads: 1 Questions: 288 Slow queries: 0 Opens: 71 Flush tables: 1 Open tables: 64 Queries per second avg: 0.018
[sqlstate] => 00000
[protocol_version] => 10
[thread_id] => 76
[warning_count] => 0
)
[query] => select * from `社員マスタ`
where 管理者 is NULL order by 氏名
[result] => Array
(
[0] => 社員マスタ
[1] => mysqli_result Object
(
[current_field] => 0
[field_count] => 13
[lengths] =>
[num_rows] => 0
[type] => 0
)
[2] => コード名称マスタ
[3] => mysqli_result Object
(
[current_field] => 0
[field_count] => 7
[lengths] =>
[num_rows] => 3
[type] => 0
)
[4] => 社員マスタ
[5] => mysqli_result Object
(
[current_field] => 0
[field_count] => 12
[lengths] =>
[num_rows] => 5
[type] => 0
)
)
[ErrorMessage] =>
[php_errormsg] => Undefined variable: ErrorDisable
[row] =>
[sentaku] =>
[GLOBALS] => Array
*RECURSION*
)
--------------------------------------
Array
(
[0] => .
[1] => C:\php\pear
[2] => C:\httpd142p\if_skeleton\lightbox99\common
[3] => C:\httpd142p\if_skeleton\lightbox99\db
[4] => C:\httpd142p\if_skeleton\lightbox99\view
)
データベースのテーブル別に配列を使って処理すると、後から確認しやすくなります
Windows・Unix(Linux)共用、PHPの include_path の動的設定方法
まず、WEB用のパスでは、ファイルをサーチする事はできません。その OS が判断できる絶対パスを作成する必要があります。Unix(Linux) の場合は、WEBのフォルダの前に、実際の / からのパスを付加します。Windows の場合は、同様の処理を行いますが、/ を \ に変換する簡単な方法として realpath を使用しています。 ※ Windows の realpath は、その場所が C ドライブだとすると、 / は C:\ に変換してくれます PATH_SEPARATOR は、ファイルサーチ用の区切り文字で、Unix(Linux) では :(コロン)、Windows では ;(セミコロン)になります。 DIRECTORY_SEPARATOR は、それぞれ / と \ となります。 realpath では、実際にそのファイルが存在しないと何も返さないので注意して下さい。 get_include_path() で元々のパスを含める事を忘れないで下さい。(恐らく)デフォルトの環境で、. が含まれているはずで、それによってカレントディレクトリの検索が可能になっています。
<?php $rpath = "/if_skeleton/lightbox99"; if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $rpath = realpath( "/httpd142p{$rpath}" ); } else { $rpath = "/home/lightbox/www/testweb{$rpath}"; } $rpath .= DIRECTORY_SEPARATOR; set_include_path(get_include_path() . PATH_SEPARATOR . "{$rpath}common" . PATH_SEPARATOR . "{$rpath}db" . PATH_SEPARATOR . "{$rpath}view");
関連する PHP ドキュメント コア php.ini ディレクティブに関する説明
2015年05月28日
PHP : PHPコマンドラインから使用中の ini ファイルをチェック
php.exe --ini ( ※ PHP 5.2.3 以降で使用可能です )他にも良く使いそうなのもののサンプルを以下に記述します
// バージョン表示 php -v // 現在の日付 php -r "print date('Ymd');" // タイムゾーンの確認 php --ri date
コマンドラインからの実行は、以下のようにエクスプローラで PHP フォルダを選択して、SHIFT しながら右クリックしてコマンドウインドウを開いて使用します。 PHP マニュアルへのリンク PHP をコマンドラインから使用する コマンドラインオプション 入出力ストリーム 関連する記事
タグ:PHP
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。 Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。 また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。 ※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです 対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。 ※ エキスパートモードで表示しています アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります<% if:page_name eq 'archive' -%> アーカイブページでのみ表示される内容 <% /if %> <% if:page_name eq 'category' -%> カテゴリページでのみ表示される内容 <% /if %> <% if:page_name eq 'tag' -%> タグページでのみ表示される内容 <% /if %>この記述は、以下の場所で使用します
|