サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
www.sound-uz.jp
問題個所を見つけ解決する「デバッグ」は「プログラミング」と対のものです。はじめから問題のないプログラムを書ける人などいませんので、問題個所を素早く発見する手段を持っているかどうかが、効率良くプログラミング出来るか否かの分かれ道でもあります。 まずは最も簡単なところで、変数が想定した値かどうか確かめることから始めましょう。 変数の値を表示させる 最も簡単に出来るデバッグは、変数の値を表示させ確かめることです。デバッグプリントというやつです。 問合せ前のSQL文や関数が受け取った引数の型など、次の関数を使って想定した値かどうか自分の目で確かめてみましょう。 var_dump( mix $val ) 引数に与えた変数 $val の型とサイズ、値を表示する関数です。値がリファレンスの時は値の前に「&」が付きますので、実体かリファレンスかも確かめられます。最も汎用的に使える関数です。 var_exp
投稿を受けた時に IP や User-Agent、投稿内容等でのフィルタリングは掲示板SPAM対策に欠かせません。もちろんうちでもフィルタリングは施していますが、受身な対策なだけにスパム投稿そのものが減るわけではありません。 ここしばらくブログで綴ってきたスパム投稿対策やログ解析を元に、掲示板スパム投稿そのものを減らす積極的な対策を考えてみました。 2010-04-12 スパム投稿のフィルタリングはこちらをお試しください。既存のPHPアプリケーションに組み込んで使います。特定のウェブフォームから投稿するもなら掲示板でもブログのコメントでも使えます。投稿内容をチェックするのとはちょっと違う掲示板スパムフィルタです。 spamp: 掲示板スパムバリデータ 掲示板スパムボットの特徴 2009年5月現在うちのBBSに来てるスパムロボットは2種類。このうちひとつを 'AHoo+C' と勝手に名づけて
Parse error は、PHPの構文から外れスクリプトとして成り立っていないことを示すエラーです。PHPの構文から外れてるのでスクリプトが実行されることはありません。「Parse error」がゼロではじめてPHPプログラミングが始まると言ってもいいかもしれません。 私も簡単な修正だけだとつい手を抜いて構文チェックせずにアップして焦ったりタマにしてしまいます。すでに広く知られたことではありますが、自分自身への戒めもこめてPHPの構文チェックの方法をおさらいです。 PHPでPHPスクリプトの構文チェック PHPスクリプトの構文チェックは、CLI版(コマンドライン版)のPHP一発で確認できます。Windows + PHP5環境なら、PHPのインストールフォルダ/php.exe が、Windows + PHP4環境なら、PHPのインストールフォルダ/cli/php.exe がコマンドライン用
PHPとは? ひとことで言えば、*Webに特化した*サーバーサイド*スクリプト言語です。主に動的にWebページを生成するのに使われています。 * Webに特化した PHP のコードは、HTMLソースの中に記述(*1)します。また、ウェブサーバの拡張モジュール(*2)として組み込まれまれていて、実行結果はブラウザに出力されます。 * サーバーサイド PHP はサーバー側で実行(*3)されます。JavaScript もHTMLソースの中に記述しますが、クライアント(ブラウザ)側で実行されます。JavaScript でブラウザなどクライアント環境を考慮しながらプログラミングするように、PHP ではサーバ環境を考慮しながらプログラミングします。 またメール送信やデータベース制御など、サーバ資源を活用する為の関数があらかじめ用意されています。 * スクリプト言語 PHPは 実行時にソースコードを解釈
created: 2007-01-21 00:50 | modified: 2007-04-04 01:37 | reply: 19 [3536] セッション クッキーの保存期間 - 江戸川アダモ - 2007-01-21 00:50 [3538] セッションの有効期間の制御 - ゆうじ - 2007-01-23 00:00 [3539] セッションの有効期限 - 江戸川アダモ - 2007-01-23 21:56 [3541] Re.セッションの有効期限 - ゆうじ - 2007-01-24 23:52 [3546] gcの不確定性 - 江戸川アダモ - 2007-01-26 06:21 [3642] 実行ファイルの書き方 - 江戸川アダモ - 2007-03-11 08:30 [3643] Re. 実行ファイルの書き方 - ゆうじ - 2007-03-11 16:35 [3644] R
データファイルのフォーマットは何がいい? 久しぶりのパフォーマンス比較シリーズ(?)です。テキスト形式のファイルにはよくお世話になります。設定ファイルなど一度読み込めば済むものはパフォーマンスが気になることはありませんが、アクセスログなどデータが多い場合、どんなフォーマットにしておけばサクサク動いてくれるのか気になったので確かめてみました。 データのフォーマット 比較したフォーマットは、PHPスクリプト、INI形式、Serializeデータ、XML形式、CSV形式 の5つです。以下は PHPで書いたアクセスログ1000件分の一部で、他の形式についてもまったく同じ内容をそれぞれの書式に直したファイルを使いました。 <?php /** * PHPスクリプトのログデータ */ $params = array ( // 一件分のログ 0 => array ( 'date' => '2009-03-
PHP Note マニュアルや参考サイトなど、何度も探したり調べたりを繰り返してるような情報を自分なりにまとめてあります。PHP4 に関しては 2002年から書き留めたままで情報として古いところもあります。
PHP 4.2.0 (2003/05) から、register_globals の初期値が Off に変更されました。これによりこれまで稼動していたスクリプトや書籍に記載されているサンプルコードが動かないといった現象に戸惑った方もいらっしゃるかと思います。 セキュリティ上の理由で変更されたのですが、入門者や初心者にとっては PHP の都合に振り回されているように感じるばかりです。いくらかでもこの初期値の変更を理解していただきたいと思い、register_globals = On で何が危険なのか、どうすれば安全なコードを書くことが出来るか考えてみました。 上書きによる改ざん register_globals = On の場合、環境変数や GET、POST などの PHP の外部からくる値は全て $変数名 という書式で使用することが出来ます。 では、同じ変数名が存在した場合はどうなるのでしょ
HTTP の仕組みはいたって簡単で、クライアントのリクエストを受けてサーバがレスポンス返す、サーバはレスポンスを返し終えた時点でひと仕事完了です。よくサーバ~クライアント間で何度かやり取りしながら一連のサービスを提供したりしていますが、ひとつひとつ独立した「リクエストとレスポンス」を続けて行うことで一連のサービスを構成しているに過ぎません。 ここで覚えておかなくてはならないのは、一旦出力したもの(HTMLなど)をサーバ側で管理することは一切出来ないと言うことです。自ら PHP で出力した HTML も例外ではなく、クライアントから想定外の値が返ってくる来る可能性があります。と言うより、常に何が来るかわからないことを前提にプログラミングすることが必要です。 PHP ではクライアントから送られてくる値を $_GET, $_POST, $_COOKIE で得ることが出来ますが、これらが想定外の値
正規表現ってあの記号の羅列っぽいところが苦手なんです。あまり長~いものだと知恵熱が出ます。でも、何年も続けてる甲斐あってようやくわかるようになってきました。良く使う正規表現パターンは限られますし、正規表現を使ったプログラミングのパターンも見えてきましたのでここいらでまとめてみました。 正規表現ってな~に? まず「郵便番号」を例にしてみます。では、郵便番号はどんな文字で構成されてるのか、後輩に教えるつもりで表現してみてください。私なら「"3桁の数字" に続けて "-(ハイフン)" があり、つづけて "4桁の数字" で構成されている文字列」と表現します。他にもあるでしょうが大抵の方にはこれでわかってもらえると思います。 この説明がまさに正規表現です。ひとことで言うなら「文字列の構成を表現したもの」といえます。文章だとコンピュータにわからないのでコンピュータにわかるよう表現したのが記号の羅列に見
ディレクトリの中身を、Explorer のツリーような形で表示させたいのだ!なんとか簡単に出来る仕組みを考えてみました。 配列によるディレクトリのモデル 先ずはデータ型。デレクトリの下にはファイル又はデレクトリがありその中にまたファイルやデレクトリが存在します。このように入れ子になった関係を保持できるデータ型といえば『配列』です。配列を使えばディレクトリーツリーを表現できそうです。 配列は、「添え字 => 値」 という関係になっていて、値にはどんなデータでも入れることが出来ます。ディレクトリ内部を獲得しようとした時、「ディレクトリ」であれば添え字に「ディレクトリ名」を格納し、値には下位の内容を配列で格納します。「ファイル」ならば添え字に「ファイル名」を格納し、値に「パス」を格納することにします。 ディレクトリ内を配列に格納した時のイメージです。 Array ( 'edithead.php'
PHPは問題があればエラーメッセージを表示します。慣れないうちは頭を抱えることもあるでしょうが、その意味さえ知っていれば問題個所の特定にこれほど役立つ情報はありません。 よくお目にかかるエラーメッセージと原因&対処方法をまとめましたので、エラーメッセージを味方につけてしまいましょう。出会ったメッセージから原因を判断してますので誤解があるかもしれません。 2008-05-10 このページの最後に、エラーメッセージの表示・非表示の設定について追記しました。開発(デバッグ)時と運用時は上手く使い分けてください。 エラーメッセージの構成 PHPが出すエラーメッセージは大きく分けて3つの要素で構成されています。 Parse error: syntax error, unexpected ';' in /***/***.php on line *** |エラーレベル| メッセージ | ファイルのパスと
PHP5のインストールは、セットアップウィザードを使う方法と、マニュアル(手作業)による方法の2種類があります。セットアップウィザードを試してみたところ、このページでやろうとしてる導入部分を自動でおこなうだけで、拡張モジュールのセットアップが面倒だったり、独自の拡張を施す時は結局手作業で設定しなければならず、ウィザードのメリットをあまり感じられませんでした。 頻繁にインストールし直すものでもありませんし、やればPHPの理解も深まりますので、マニュアルでインストールすることにします。 PHP5 の入手 Windows版PHPのバイナリファイルは、本家とミラーサイトのダウンロードページから入手できます。 PHP: Downloads ダウンロードページの PHP 5.x.x の Windows Binaries という記述下の PHP 5.x.x zip package をクリックするとミラー
お詫び:コードが間違ってたためにながらく間違ったことをお伝えしていました。どうもすみません。 あらためて、文字列連結の手段のうち、「.=」による追記、「.」による連結、変数を「""」に埋め込む非連結、3つの実行速度を確認してみました。書き方がそれぞれ違うので、代入1回、連結2回、をおこなってバランスを取ることにします。 この差を確かめるべく、関数内で値を変更するようテストコードを直しましたので「新テストコード」をおためしください。 テストコード(修正版) <?php // 連結用文字列 $str1 = "AAA"; $str2 = "BBB"; $str3 = "CCC"; $count = 10000; / /繰り返す回数 // 現在の時間をマイクロ秒単位で返す関数 function getmicrotime(){ list($msec, $sec) = explode(" ", mic
文字の長さを調べたり、特定の文字を置き換えたり、良くやる文字列処理の覚書き。 改行コードを得る 文字列中の改行コードを <br /> に置き換え 文字列中の <br /> を改行コードに置き換え 文字列中の改行コードを削除 文字列中の改行コードをOSの改行コードに統一 最後の文字を削除 文字列の始めと終わりの空白文字を削除 文字列の終わりの '/' を削除 HTMLエンティティを元に戻す(htmlspecialcharsの逆) 任意のカラム数($len)で文字列を丸める magic_quotes_gpcのエスケープ文字を削除する ルートからの絶対パスか判定する 改行コードを得る 改行コードの自動変換機能を持ったFTPクライアントと併用すれば、OS の改行コードが必要な時に OS の違いを気にせずに済みます。 function cr () { return " "; // ↑ココの改行コード
Apache - httpd.conf の編集 Apache の設定ファイル 「httpd.conf」は、Apache をインストールしたフォルダの「/conf」フォルダの中にあります。これをエディタで編集します。 httpd.conf では「#」以降行末までがコメントです。値を変える際値を上書きしてもかまいませんが、元の値は行ごとコメントアウトしておいて新らしい行を書き加えておけば、不都合があった時すぐ元の状態に戻せます。 httpd.conf は Apacheの起動時に読み込まれます。変更したら Apacheの再起動を忘れずに。 DocumentRoot ブラウザからアクセスできるドキュメントルート(ベースフォルダ)を設定します。 ここで設定したフォルダ以下がブラウザでアクセス出来るようになります。例えば、D:/home/mysite/htdocs を DocumentRoot に設定
C言語では、値渡しの場合は値のコピーが渡され、参照渡しの場合は値のアドレスが渡される。単純に考えて参照渡しの方が高速そうですが PHPはどうなのか? これまた確かめてみないと納得できない性格なのでやっちゃいました。 リファレンス == 実体の別名 2004-02-25: PHPの場合、C語と異なり、参照渡し・値渡しの違いは、値が変更された時に初めて起こることが、PaKa様のご指摘によりわかりました。ありがとうございました。 関数に渡した時点ではどちらも「実体」を示す「ポインタのようなもの」が渡されていて、関数内で変更された時はじめて渡した値がコピーされるという動作のようです。つまり受け取った変数を変更しなければ値渡しと参照渡しで差は無いということです。 PHP では「 参照 」と「 リファレンス 」どちらの言葉も使いますが、C語におけるポインタやアドレス渡しを指す参照とは違い、PHP の参
クライアント(ブラウザ)側からするとリクエストを送信しレスポンスを得る、ウェブサーバ側からするとリクエストを受けてレスポンスを返す、といういたって簡単な仕組みで HTTP通信は成り立っています。この中で PHP が担っているのは、ウェブサーバが受けたリクエストに応じてサーバの資源や情報を適切な形に加工することです。 では、どのようなリクエスト方法があってどうすれば PHP で利用できるか、クライアント→PHP の値の受け渡し方法を見てみたいと思います。 GET リクエスト URL だけを使ったリクエスト方法です。シンプルに値を送信できますが、実質文字数に限り(2000バイト程度まで)があるので、比較的情報量が少ない単純な値を送信するの適しています。 GET リクエストを送信する 一番なじみがあるのはアンカータグでしょう。ブラウザのURL欄に直接URLを入力するのと同じ事です。 <a hre
携帯端末の移り変わりは早くこのコンテンツははっきり言って古いです。ブラウザの判別や文字コードの処理の参考資料程度になるかと思いますので残しています。 わりと新しい情報としては↓この掲示板のやりとりや、このページ最下部の「携帯端末コンテンツ作成で役立つサイト」のリンク先が参考になります。 正規表現で抽出した文字 端末判別 携帯端末を判別するには PCでブラウザを判別する時と同じように、$_SERVER['HTTP_USER_AGENT'] の値を調べます。この書式は 4.1.0 以降のバージョンで利用可能です。それ以前のバージョンでは、$HTTP_USER_AGENT を使用します。 $_SERVER['HTTP_USER_AGENT'] の値には、i-mode端末は "DoCoMo"、j-sky端末は、"J-PHONE"、Ezweb端末は、"UP.Browser" という文字列が含まれてい
DocumentRoot ブラウザからアクセスできるベースフォルダ(ディレクトリ)を設定します。 ここで設定したフォルダ以下がブラウザでアクセス出来るようになります。例えば、D:/home/mysite/htdocs/index.php は http://localhost/index.php でアクセスできます。 デフォルトでは、C:/usr/local/Apache/htdocs のように Apacheをインストールしたフォルダ以下になっていますので、これを都合の良いフォルダ名に書き換えます。 300 | # symbolic links and aliases may be used to point to other locations. 301 | # 302 | #DocumentRoot "C:/usr/local/Apache/htdocs" 302 | Do
C言語では、値渡しの場合は値のコピーが渡され、参照渡しの場合は値のアドレスが渡される。単純に考えて参照渡しの方が高速そうですが PHPはどうなのか? これまた確かめてみないと納得できない性格なのでやっちゃいました。 リファレンス == 実体の別名 2004-02-25: PHPの場合、C語と異なり、参照渡し・値渡しの違いは、値が変更された時に初めて起こることが、PaKa様のご指摘によりわかりました。ありがとうございました。 関数に渡した時点ではどちらも「実体」を示す「ポインタのようなもの」が渡されていて、関数内で変更された時はじめて渡した値がコピーされるという動作のようです。つまり受け取った変数を変更しなければ値渡しと参照渡しで差は無いということです。 PHP では「 参照 」と「 リファレンス 」どちらの言葉も使いますが、C語におけるポインタやアドレス渡しを指す参照とは違い、PH
お詫び:コードが間違ってたためにながらく間違ったことをお伝えしていました。どうもすみません。 あらためて、文字列連結の手段のうち、「.=」による追記、「.」による連結、変数を「""」に埋め込む非連結、3つの実行速度を確認してみました。書き方がそれぞれ違うので、代入1回、連結2回、をおこなってバランスを取ることにします。 この差を確かめるべく、関数内で値を変更するようテストコードを直しましたので「新テストコード」をおためしください。 テストコード(修正版) <?php // 連結用文字列 $str1 = "AAA"; $str2 = "BBB"; $str3 = "CCC"; $count = 10000; / /繰り返す回数 // 現在の時間をマイクロ秒単位で返す関数 function getmicrotime(){ list($msec, $sec) = expl
ディレクトリの中身を、Explorer のツリーような形で表示させたいのだ!なんとか簡単に出来る仕組みを考えてみました。 配列によるディレクトリのモデル 先ずはデータ型。デレクトリの下にはファイル又はデレクトリがありその中にまたファイルやデレクトリが存在します。このように入れ子になった関係を保持できるデータ型といえば『配列』です。配列を使えばディレクトリーツリーを表現できそうです。 配列は、「添え字 => 値」 という関係になっていて、値にはどんなデータでも入れることが出来ます。ディレクトリ内部を獲得しようとした時、「ディレクトリ」であれば添え字に「ディレクトリ名」を格納し、値には下位の内容を配列で格納します。「ファイル」ならば添え字に「ファイル名」を格納し、値に「パス」を格納することにします。 ディレクトリ内を配列に格納した時のイメージです。 Array ( 'edithea
文字の長さを調べたり、特定の文字を置き換えたり、良くやる文字列処理の覚書き。 改行コードを得る 文字列中の改行コードを <br /> に置き換え 文字列中の <br /> を改行コードに置き換え HTMLエンティティを元に戻す(htmlspecialcharsの逆) 任意のカラム数($len)で文字列を丸める magic_quotes_gpcのエスケープ文字を削除する ルートからの絶対パスか判定する 改行コードを得る 改行コードの自動変換機能を持ったFTPクライアントと併用すれば、OS の改行コードが必要な時に OS の違いを気にせずに済みます。 function cr () { return " "; // ↑ココの改行コードを返す } 文字列中の改行コードを <br /> に置き換え $str = str_replace(array("\r\n","\r
MySQL3系は、3.23.58(2003-11-15)のリリースを最後に配布が終了されました。現在入手することはできません。 2008年3月現在、入手可能な古いバージョンは 4.1.22 です。 MySQL3の入手 MySQL Product Archives ダウンロードページ 各OS用のMySQLがおいてあります。「 Microsoft Windows 」という記述下の 「 Microsoft Windows . (ZIP format) 」をクリックすると、インストラー付きのMySQLがダウンロードされます。 インストール手順 MySQL にはインストーラが付属していますので、表示されるガイダンスに従って進んでいくだけでインストールは完了します。あと実際に使うために少々初期設定が必要です。テキストを編集したり、DOS窓からコマンドを打ったりしします。 ダウンロードした、
PHP 4.2.0 (2003/05) から、register_globals の初期値が Off に変更されました。これによりこれまで稼動していたスクリプトや書籍に記載されているサンプルコードが動かないといった現象に戸惑った方もいらっしゃるかと思います。 セキュリティ上の理由で変更されたのですが、入門者や初心者にとっては PHP の都合に振り回されているように感じるばかりです。いくらかでもこの初期値の変更を理解していただきたいと思い、register_globals = On で何が危険なのか、どうすれば安全なコードを書くことが出来るか考えてみました。 上書きによる改ざん register_globals = On の場合、環境変数や GET、POST などの PHP の外部からくる値は全て $変数名 という書式で使用することが出来ます。 では、同じ変数名が存在した場合はどうなるの
次のページ
このページを最初にブックマークしてみませんか?
『ホームページ - Sound Uz』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く