ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2014年1月27日月曜日

PHP 備忘録 in_arrayでよくエラー出してませんか?

はい、出してます。私です。



配列じゃねーよ的なエラーを出してしまうことがあります。
なんらかの条件分岐だったりなんやらで配列じゃないとき。
テスト不足とも言う。
Warning: Wrong datatype for second argument in call to in_array 

今更今更で本当に恥ずかしい・・・・
ちゃんと宣言していれば問題なし!という目からうろこ
 
$hoge = array();

PHPはいきなり変数を使っても怒られないので甘えてる自分がいました。
これからは気を引き締めて向きあいたいと思います。以上です!

2014年1月12日日曜日

備忘録 画像の入っているフォルダを探して画像を一覧表示。

一つのフォルダだけではなく、その下にある階層のフォルダも探します。
使わせて頂いたのは
こちらのサイトのスクリプトと
http://blog.livedoor.jp/qoozy/archives/52547714.html
こちらのサイトのコード。
http://php-archive.net/php/file-tree/

まず、上のサイトを見ながらimage.phpや画像フォルダの設定をします。
一旦保存して、自分の環境で動くか確認。
イメージフォルダが一つで、その中に直接画像が入っている場合は
これだけで十分です。
背景色変えたり表示サイズ変えたりもできるので
かなり有用なツールだと思います。

ただ、今回の環境が
「階層化されたフォルダ内での画像全て」だったので、
下のサイトのソースを追加します。

これで配列に入ったパスをarray_uniqueで重複削除、
パスをGETで渡すようにしてループで回します。


これなら画像フォルダが増えても大丈夫。
ただ、画像の入っているフォルダパスしか取らないので、
先にフォルダだけを作っておく場合だと
全部の画像フォルダ名までは分からないです。

あとは、フォルダが増えた時用に
適当な数で改行するようにしてもいいかもしれないです。

2013年12月16日月曜日

PHP備忘録 フォルダごとまるっと削除する。

アップロード系のツールや
ファイルを自動生成するプログラムがあると、
生成されたファイル・フォルダがapache所有になっていて
こちらから削除ができない、なんて事がたまにあります。

パス間違えてフォルダ作っちゃった時なんてもう・・・
そんな時は、phpでプログラムを走らせればOKです。
コマンドでもできるのですが、どうにも苦手なもんで。

※フォルダの削除については自己責任でお願い致します。




phpの場合、フォルダをまるっと削除する事はできません。
フォルダの中身をunlinkで一個ずつ消してから、
rmdirでフォルダを削除する流れになります。

2013年12月14日土曜日

モールス信号を作ってくれるサイトが地味にすごい。



仕事中偶然見つけたサイト。
デザインがレトロ感あって好みなのですが、
何がすごいって
「入力した文章(英語)をモールス信号にしてくれる」
困った時にはここで調べれば即変換してくれます!

・・・それだけ、なんだと思います。
でも、真ん中の機械がちゃんと動くんですよ!
トントンツーって。
こういう細かい仕掛け大好きです。

さすがにこれで業務メール送る訳にはいかないけれど
なんか、使えないですかねー。

そんな素敵サイトはこちら。
Morse Node

2013年10月23日水曜日

CSSで何気なく使っているコメントアウトの落とし穴。



http://www12.plala.or.jp/costellazione/css-make/write.html

最近知りました、お恥ずかしい。
どうやら全角がダメなのはCSSだけっぽいですね。
今までは奇跡的に全角を入れてなかったようです。すごい。
あと、PHPとかJavascriptでは普通に使えてる、

これも、CSSには効かないので注意。
一行コメントと言えばこれ、って感じがするけど
CSSで使えるのは「/* コメント */」のみなんですね。

ちなみに、他の言語でのコメントアウト一覧はこちら。
http://web-terminal.blogspot.jp/2013/04/commentout.html

こんなに種類あるのか・・・。

最後に、簡単に切り替えられるコメント欄の書き方。
http://qiita.com/Hiraku/items/de8c44520d5aa9268ac7
この発想はなかった。

2013年10月19日土曜日

とあるページの作成で覚えた小技。
ブログのように各パーツをincludeで表示させているのですが、

頻繁にアクセスされる箇所なので、
phpではなくキャッシュファイルにしてincludeさせようと思いました。
変数にいれてファイル書き込みで十分いけるのですが、
とある箇所で再帰関数を使っているため

http://hayashikejinan.com/webwork/php/492/
こちらのブログを参考にさせて頂きました。

ob_start();以下の文章を
ob_get_contents();で返すそうです。
最後には必ず、ob_end_clean();でバッファをクリアしましょう。

http://www.php.net/manual/ja/function.ob-get-contents.php

簡単なコードにするとこんな感じです。

再帰の処理がob_start();より前にあっても使えます。
実際は中でSQL発行して再帰してうんぬんがあるのですが、
それでも普通にhtmlを作成してくれました。感動。

2013年10月11日金曜日

PHP arrayどんなときに使うかその2 日ごとや月ごとに表に出したい 「日付ごとにどの商品が何個売れたか」など

前回は全体で何個売れたかを表で出力する方法を書きましたが 今回は日付ごとにどの商品がどれくらい売れたかを表にしたいと思います。
1回ループを多くまわします。
商品以外、日付以外でももちろん応用可能で、データベースやファイルから取得するタイミングで表示することもありますが(ループの中でぐるぐる表示)何らかの形を変えて表示するときに使ったりします。

最終的に出したい形は以下の通り
2013年10月 日付 1日 2日 3 4 5 6 7 8 9 10 11 12 13 省略・・・ 29 30 31 合計
売り上げ やくそう 5 4 2 16 10 9 3 4 3 1 … … 249
どくけしそう 6 5 2 9 0 7 3 4 3 10 … … 89
キメラのつばさ 1 10 9 13 2 0 3 0 5 6 … … 176


商品テーブル
商品コード 商品名
1 やくそう
2 どくけしそう
3 キメラのつばさ


売上テーブル
売上日付 商品コード 数量
2013-10-01 1 5
2013-10-01 2 6
2013-10-02 3 25


実行結果は上の表の通りになりました。
ほかに日付ごと、月ごとの予約件数とか日付にかかわらずあとで加工するとき一旦配列にいれておくという使い方をしています。

2013年10月10日木曜日

PHP arrayどんなときに使うかその1 日ごとや月ごとに表に出したい 「日付ごとに何個売れたか」など


今回は(商品の種類は関係なく)全体で何個売れたかなどの場合に使います。
商品以外、日付以外でももちろん応用可能で、データベースやファイルから取得するタイミングで表示することもありますが(ループの中でぐるぐる表示)何らかの形を変えて表示するときに使ったりします。

最終的に出したい形は以下の通り
2013年10月 日付 1日 2日 3 4 5 6 7 8 9 10 11 12 13 14 省略・・・ 29 30 31 合計
売り上げ 11 25 7 30 12 20 11 19 5 10 … … 510


商品テーブル
商品コード 商品名
1 やくそう
2 どくけしそう
3 キメラのつばさ


売上テーブル
売上日付 商品コード 数量
2013-10-01 1 5
2013-10-01 2 6
2013-10-02 3 25


実行結果は上の表の通りです。

2013年10月1日火曜日

いつか何かで使ってみたい、Jqueryで隠しコマンドのページ

ページにちょっとしたお遊び要素を入れる時に、
普通に隠しリンクを仕込むだけだとつまらない。
何か変わったギミックはないものか・・・
と探していると、いいのがありました。

コナミコマンドをページに仕込む。

Cheat Coadプラグインというものを使えば、
誰でも簡単にページに仕込めるそうです。

※Jqueryは既にあるものとします。

まずは、こちらからプラグインをダウンロード。
http://www.trovster.com/lab/plugins/cheat-code/

次に、仕込むページのHeader部分に以下を記述します。



たったこれだけ!
code:の後ろは適宜調べてオリジナルコマンドにしてもOKです。
コードを調べる時は、下記のサイトが便利。
http://himajin.moo.jp/javascript/keycode.html

codeの行を消すと、デフォルトのコナミコマンド(↑↑↓↓←→←→BA)になります。
alertじゃなくて、ページ遷移もいいかと思います。
必須機能ではないけれど、こういうお遊び要素があってもいいですよね。

2013年9月26日木曜日

PHP 備忘録 直前にINSERTしたIDをしりたい

直前に追加したシーケンスをしりたいときに便利です。

PostgreSQLでデータをINSERTしたとき関連テーブルにもINSERTしたい。
そのとき最初のテーブルのSERIALを知りたいが
その値は自動で振られているのでわからないときに使います。


毎回調べるのでメモ

①データをINSERT
table1
id :SERIAL
name : text

INSERT INTO table1 (name) VALUES ("test")
(idのデータ型にはSERIALを設定しているので自動で挿入されます。)


②シーケンスの値を取得
$sql = "SELECT currval(table1_id_seq) as val";
$rtns = pg_query($connect,$sql);
$val = pg_fetch_result($rtns,"val");

これで調べることができました!

シーケンス操作関数
http://www.postgresql.jp/document/8.4/html/functions-sequence.html

2013年9月22日日曜日

PHP⇒HTMLでキャッシュページ作成

MySQLとPHP5で、ブログのような投稿型のコンテンツを作成。
アクセスが増えたら表示のたびにPHPで読みに行って負荷がかかるかも、てことで
キャッシュページを作れば良いのではないか、との啓示を受けました。

PHP⇒HTMLでキャッシュページ作成

サーバーやhtaccessは触らない方向で行きたいので、
記事を作成すると同時にキャッシュ用のHTMLを作成する事にしました。
ざっくりとした作成方法は以下の通りです。



MySQLでは、INSERTした直後の最新IDを取得する時に
LAST_INSERT_ID()
を使うのですが、今回はPHPで使用するため
mysqli_insert_id();
こちらを使います。

この関数はAUTO_INCREMENT属性(シリアルとか)を持つテーブルで
UPDATEとかINSERTをした場合に、生成された最新のIDを返します。
直前のクエリでUPDATE、INSERTが無ければゼロを返します。
http://www.php.net/manual/ja/mysqli.insert-id.php

なんて便利。

表示する時は、リンク先をとかにして、
view.php内でGETした記事番号のHTMLを呼び出します。
iframeの中に表示してもよし、includeで読み込むもよし。

これで少しでも軽減されたら嬉しいなあ。
でも、もっとスマートな方法がありそうですね。

ちなみに、PEARのライブラリとかhtaccessをいじる方法だと
下記のリンクが参考になるかもしれないです。
http://phpspot.org/blog/archives/2011/03/webphp_1.html
http://damepg.doorblog.jp/archives/7229518.html
http://codezine.jp/article/detail/1027?p=1

2013年9月18日水曜日

PHP 備忘録 includeとrequireの違い

ファイルの中でもたまに混在してたりするこれら。
ここで改めて確認です。


include
ファイルを見つけられない場合にwarningを発行します。
ファイルがない場合でも処理を続行します。
require
ファイルを見つけられない場合にfatal errorを発行する点が異なります。
ファイルがない場スクリプトの処理がそこで止まってしまう。

ループの中毎回異なるファイルを読み込む場合はincludeを使う
同じのは大丈夫か今度検証しよう

参考URL
http://www.geocities.jp/web9star/php_applied/include.html
http://php.net/manual/ja/function.include.php
http://www.php.net/manual/ja/function.require.php

2013年9月14日土曜日

PHP備忘録 こっちにあってこっちにない

配列の差分を取得するときはarray_diffを使います。
array_diff
添え字を振り直すarray_values
実行結果をみると添え字の数字が[2]のままで[0]ではない。
for文でまわしたりするとき不便なので添え字を振り直します。
array_values

振りなおされました~
かゆいところに手が届きます!

PHP備忘録 どっちが大きいか

数値を比較し大きい値を返したいときは関数maxを使います。
max

最小値を返したいときは関数minを使います。

2013年9月12日木曜日

PHPでゼロサプレスとゼロパディング

PHPでゼロサプレスとゼロパディングをする方法です。
先頭の0を削除したいときにゼロサプレスを。
先頭を0で埋めたい時にゼロパディングを使用します。

とても簡単ですが、ゼロサプレスは頻繁に使うものではないのでたま~に忘れたりします。

例
$ymd = date("Y-m-d"); //現在日時をYYYY-MM-DDの形式で取得

list($y, $m, $d) = explode("-", $ymd); //何か理由があり年月日を分割

$zerosuppress = intval($m); //何か理由があり、先頭の0を削除したいとき
$zeropadding = sprintf("%02d", $zerosuppress); //やっぱり頭に0を付けたいとき


ね?簡単でしょ?

2013年8月31日土曜日

PHPからMecabを使う

読み・品詞などを取得する場合はこのように。



単純に文字列を配列として取得する場合は下記のようにする。


ここでいくつか問題が。
電話番号など連続した数字をわかち書きすると「0」「1」など1文字ずつ分かれてしまいます。
設定ファイルを変更すればいいようなのですが、現状それができない状態です。

正規表現でやろうかなあ。

参考URL
http://d.hatena.ne.jp/knaka20blue/20110704/1309767917

2013年8月17日土曜日

CentosにMecabをインストール

検索ツールを作成したくいろいろ調べたところ「MeCab」なるものが。
名前に魅かれて早速インストールを試します。

Mecabとは


wgetするとき参考サイトのURLだとエラーが起きたり・・
いろいろ試してたどり着きました。

流れはこうです。
手順1:MeCabインストール
手順2:辞書データインストール
手順3:php-mecabインストール

環境

CentOS 5.9
PHP Version 5.3.3

MeCab0.98インストール

# cd /usr/local/src/
# wget http://mecab.googlecode.com/files/mecab-0.98.tar.gz
# tar xvfz mecab-0.98.tar.gz
# cd mecab-0.98
# ./configure --enable-utf8-only
# make
# make install
# ldconfig


辞書データインストール

# cd /usr/local/src/
# wget http://iij.dl.sourceforge.jp/naist-jdic/48487/mecab-naist-jdic-0.6.3-20100801.tar.gz
# tar xvfz mecab-naist-jdic-0.6.3-20100801.tar.gz
# cd mecab-naist-jdic-0.6.3-20100801
# ./configure --with-charset=utf8
# make
# make install
# vi /usr/local/etc/mecabrc
(編集)
;dicdir =  /usr/local/lib/mecab/dic/ipadic コメントアウト
dicdir =  /usr/local/lib/mecab/dic/naist-jdic 追加
# mecab
mecabインストール完了!


参考URL
http://d.hatena.ne.jp/akiiiiiiiio/20110412/1302605979


php-mecabインストール

# wget https://github.com/downloads/rsky/php-mecab/php-mecab-0.5.0.tgz
# tar xzvf php-mecab-0.5.0.tgz
# cd php-mecab-0.5.0
# yum install php53-devel
# phpize
# ./configure -with-php-config=/usr/bin/php-config -with-mecab=/usr/local/bin/mecab-config
# make
# make install


php.ini追加
extension=mecab.so

apacheの再起動


phpinfo() でmecabの項目が表示されてたら完了

表示されてるー(^0^)/

参考URL
http://corechika.com/2013/04/
http://d.hatena.ne.jp/Kmusiclife/20101020/1287512977

次回は使い方を書きまーす。