カテゴリ:ソフトウェア開発( 9 )

phpのglob関数の落とし穴

phpにはglob関数というディレクトリ内のファイル/フォルダの一覧を取得する関数があります。

ワイルドカードも使えてとても便利です。

ところがたまにうまく動かないことが。

パス名に [ が入っていると正常に動作しません。

glob関数ではこういった特殊文字をエスケープする必要があります。

事前に下記のコードでエスケープしてから実行しましょう。


$escapedPath = preg_replace('/(\*|\?|\[)/', '[$1]', $path);






[PR]
by golorih | 2016-12-10 16:20 | ソフトウェア開発 | Trackback | Comments(0)

[PHP] json_encode でエンコードした値を cookie に設定して使うと json_decode の結果がnullになることがある

setcookie関数はcookieに値を保存する際に addslashes関数を用いる模様。
そのため、json_encode関数でエンコードした結果をcookieに保存すると、
json_decode関数ではデコードに失敗することがある。

対応として cookieの値を取得後、いったん stripslashes関数を用いると正常に動作する。


イメージとしては下記のような感じです。(動作検証してません)

function save_cookie($name, $value) {
$json = json_encode( $value );
setcookie($name, $json);
}

function load_cookie($name) {
if(isset( $_COOKIE[$name] )){
$value = stripslashes($_COOKIE[$name]);
return json_decode($value);
}
return false;
}

[PR]
by golorih | 2016-04-20 18:09 | ソフトウェア開発 | Trackback | Comments(0)

BamCompile で dll 取り込み時に実行エラー

Warning: dl_memory(): Unable to load dynamic library 'PHP_MBSTRING.DLL' - 指定されたモジュールが見つかりません。
in bambalam_init.php on line 1


というエラーで実行できない場合。
どうも bamcompile は php 4.4.4 で動作するんだそうで、5.3系とか最新版の dll を取り込んでも使えないようです。

なお旧バージョンは下記からダウンロード可能です。
http://php.net/releases/index.php



で、使えるようにはなったけども、UTF-16LE への文字コード変換がしたかったのに、古いバージョンだと文字コードが非対応でした・・・
[PR]
by golorih | 2013-09-20 20:23 | ソフトウェア開発 | Trackback | Comments(0)

通信内容を取得するソフトウェア fiddler

http://fiddler2.com/

通信時のパケットを閲覧できるソフト。
Windows専用。要 .NET2.0 or 4.0。
ウェブアプリを開発する際に便利。

なおローカルプロキシとして動作するが、プログラムから fiddler を使う場合には localhost:8888 を経由する必要がある。


参考: PHPでfile_get_contents関数でproxyサーバを経由する方法
 http://www.programming-magic.com/20080226023511/
[PR]
by golorih | 2013-06-03 19:08 | ソフトウェア開発 | Trackback | Comments(0)

atpages.jp で phpinfo関数が使えないので対処法

ini_get_all関数を使えば、設定がある程度わかります。

<?php
    echo '<pre>';
    print_r( ini_get_all() );
    echo '</pre>';
?>


結果の一部:
e0051410_11121035.png

[PR]
by golorih | 2012-10-18 21:08 | ソフトウェア開発 | Trackback | Comments(0)

PHPでFC2ブログからデータを取得するときに文字化けする問題

FC2ブログのHTMLデータを取得する処理を書いてたら、妙な文字化けを起こすことがあることに気付いた。
しかも再現したりしなかったりで、なんじゃい こりゃあ?
file_get_content でやっても、cURL でやっても発生する。

同じページをひたすら取得して先頭40bytesだけ表示するプログラムをループ実行させたら、ちゃんと読めるときと読めないときがある。わけがわからないよ…
e0051410_18134350.png

livedoor blog では問題なくて、fc2ブログだけで発生。

で、結論としては、FC2ブログのサーバ側が gzip 形式でデータを圧縮して送りつけてたのが原因でした。

・・・え?(;゚Д゚)
PHPって、デフォルトでデコードしてくれないの??

続きを読む
[PR]
by golorih | 2011-11-22 18:10 | ソフトウェア開発 | Trackback | Comments(0)

PHPで相対パスから絶対パスを生成

PHPでプログラミングしてるとき、Location ヘッダで302転送かけようと思ったのですが、
RFCの仕様上は転送先を絶対パスで指定しなくちゃいけなくて、
おまけにPHPの標準関数では相対パスを絶対パスに変換する関数がないし、
(※ realpath関数 はローカルで実在するパスにしか使えません)
ググッてみたら色んな人が自前で作って公開してたけど、
Windowsローカル環境&ウェブ環境の両方で使うおいらにはマッチしなかったので自前で作ってみた。

作ってから たいていのブラウザではLocationヘッダを相対パスで指定してもちゃんと動く ということを知りましたケドね☆彡

んで、特徴はたいていのパスの書き方には対応してることです。
・Windows / Unix 形式両対応
・Windowsのネットワークパス対応 ( \\dcserver\NETLOGON とか )
・ほとんどのプロトコルに対応 (http, https, ftp, gopher, mmtp ... )
・相対パス同士の連結には使えません

以下ソース。

More
[PR]
by golorih | 2011-11-21 20:12 | ソフトウェア開発 | Trackback | Comments(0)

preg_match_allのフラグ設定による結果の違い

PHPのpreg_match_allのフラグによって得られる配列の仕様が異なる。
それらのデータの違いをメモしておく。

<?php
$string = "<b style='font-size: 12pt;'>太字</b><u>下線</u>";
$pattern = '/<(.*?)[\s]*?([^>]*?)>(.*?)<\/(\1)>/';

preg_match_all($pattern, $string, $r, PREG_PATTERN_ORDER);
print '<b>PREG_PATTERN_ORDER</b>';
print__r($r);

preg_match_all($pattern, $string, $r, PREG_SET_ORDER);
print '<b>PREG_SET_ORDER</b>';
print__r($r);

preg_match_all($pattern, $string, $r, PREG_OFFSET_CAPTURE);
print '<b>PREG_OFFSET_CAPTURE</b>';
print__r($r);

function print__r($r)
{
print '<pre>';
print_r($r);
print '</pre>';
}
?>

More
[PR]
by golorih | 2007-12-11 20:10 | ソフトウェア開発 | Trackback | Comments(0)

[PHP] preg_match_all の mbstring版

前置き・・・preg_match_all関数について

preg_match_all は、同一の文字列から何度でもマッチする文字列を検出してくれる関数。

 例
  検索対象: Hello, I am Nancy.
  検索パターン: /[^\s]+/
   ※ 正規表現で [スペースでないものが続く文字列] って意味です。

 結果
  Hello,
  I
  am
  Nancy.

のように帰ってくる関数です。(ほんとはちょっと違うけど)
preg_match関数だと、最初の Hello, しか見つけてくれないので何度も出現する場合に重宝します。
でも、悲しいけどこれってマルチバイトに非対応なのよね。

そんなわけで、通常は mb_ereg 関数などのマルチバイト対応関数を使うんですが、それには preg_match_allのような関数がないので、どうするかってのが本題です。

More
[PR]
by golorih | 2007-11-20 11:12 | ソフトウェア開発 | Trackback | Comments(0)


システム関連の個人的な備忘録。基本的にWindows関連です。

プロフィール

関連


Memoる

一生懸命だと知恵が出る
中途半端だと愚痴が出る
いい加減だと言い訳が出る

「やりたい」なんて言葉は使う必要が無い。「今やってる」「もうやった」「やらないことにした」なら使って良い。
まずは相手を好きになる、その次に相手のいい部分を探す、そして評価できる部分を見つける。それからです、誉めるのは。

カテゴリ

全体
ソフトウェア関連
ソフトウェア開発
Linuxサーバ
その他
Webサービス
MySQL
システム管理
test
バッチファイル
つぶやき
パソコンメーカー
jQuery
レビュー
実験と検証
セキュリティ対策
YahooPipes
vbs
ハードウェア関連
WordPress
JavaScript
HTML&CSS
Welcart
未分類

以前の記事

2017年 10月
2017年 09月
2017年 07月
2016年 12月
2016年 10月
2016年 08月
2016年 07月
2016年 04月
2016年 03月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 05月
2015年 03月
2015年 01月
2014年 11月
2014年 10月
2014年 09月
2014年 08月
2014年 06月
2014年 05月
2014年 04月
2014年 03月
2014年 02月
2014年 01月
2013年 12月
2013年 11月
2013年 10月
2013年 09月
2013年 08月
2013年 07月
2013年 06月
2013年 05月
2013年 04月
2013年 03月
2013年 02月
2013年 01月
2012年 12月
2012年 11月
2012年 10月
2012年 09月
2012年 08月
2012年 07月
2012年 05月
2012年 04月
2012年 03月
2012年 02月
2011年 11月
2011年 10月
2011年 09月
2011年 06月
2011年 05月
2011年 04月
2011年 03月
2011年 02月
2010年 12月
2010年 11月
2010年 10月
2010年 09月
2010年 08月
2010年 07月
2010年 06月
2010年 02月
2009年 12月
2009年 10月
2008年 12月
2008年 06月
2008年 05月
2008年 04月
2008年 03月
2008年 01月
2007年 12月
2007年 11月
2007年 08月
2007年 07月
2005年 09月
2005年 08月

フォロー中のブログ

最新のコメント

リコーの件でたどり着きま..
by T at 14:14
検索してたどり着きました..
by KA at 06:53
VNCでええやん、まんど..
by 7C at 14:59
最近AEROADMINを..
by 森隆弘 at 09:48
亀ですがリンク先修正しま..
by golorih at 14:47
あれから何度かONUとP..
by 朝から at 19:56
バッチが見れないので中身..
by あいりっく at 17:28
>朝から >自宅の環境..
by Troro at 23:29
試した結果、記事の方法で..
by Tororo at 23:18
ONUに直接PCを接続す..
by 朝から at 07:18

その他のジャンル

ファン

記事ランキング

ブログジャンル

ネット・IT技術

画像一覧