Category Archives: php

phpで”Cannot use a scalar value as an array”

1
Filed under php
Tagged as

phpで

“Cannot use a scalar value as an array”

が表示されて処理ができなかったときのお話です。

グーグル先生に質問をしてみたところ、
配列を初期化している部分に問題があるのがわかりました。
たとえば、

// 初期化
$test['abc'] = ”;

// 配列に値を入れる
$test['abc']['aaa'] = aaaa;

こんなことしたときにエラーになりました。

要するに、$test['abc']はスカラー変数なのに、$test['abc']['aaa']のように
配列に値をいれようとしてるよ!
という警告のようです。

ということで、初期化している部分をコメントアウトして対処しました。

多分初歩的な内容なんだろうな。。

ZendFrameworkで404エラー

0
Filed under .htaccess, Apache, php, Zend Framework
Tagged as ,

.htaccessでmod_rewriteを使って転送してるつもりが、
404エラーになってしまう。

Apacheのエラーログ(error_log)では、「File does not exist:」が
でてる状態なわけです。

こんな現象とちょっと戯れたので、メモしとく。

.htaccessの内容は以下。

## リライトエンジンを有効に。

RewriteEngine On

## リライトの対象パスを指定

RewriteBase /

## リライトルールを宣言(条件・アクセス先)

RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

まあ、これで普通はmod_rewriteによって、該当領域にきたアクセスで
RewriteRuleで指定されている画像など以外のものは、
すべてindex.phpにアクセスされるようになるはずなんですね。

ここで大きな落とし穴がありました。
.htaccessの書き方が問題なくても、
そもそも.htaccessを有効にしてない場合があるわけです。

Apacheのhttpd.confに「AllowOverride」って項目があるわけです。
これが「None」とかになってると、.htaccessが利用できないです。

これは、サーバ管理者にお願いする形になっちゃうんでしょうけど、
修正するしかないですね。

ZendFrameworkのおすすめ書籍


危険なプログラミング25

0
Filed under perl, php, python, シェルスクリプト
Tagged as ,

ウェブの世界を徘徊してたら、見かけました。

海外の有名な人たちが、危険なプログラミング25を発表したようですね。

 

ぱっと見だと、

 

 ・入力された値のVaidation

 ・出力するもののエンコードとエスケープ処理

 ・SQLインジェクション

 ・クロスサイトスクリプティング

 ・OSコマンド系のインジェクション

   :

 

なんてあたりのが25項目書いてるみたいっすね。

 

ちょっと時間ができたら、見返してみようとおもってます。

 

もし、お時間がある方はみといたら、どうでしょう。(英語です)

http://www.sans.org/top25errors/?utm_source=web&utm_medium=text-ad&utm_content=Announcement_Bar_20090111&utm_campaign=Top25&ref=37029#s4

Commitは命じゃ!!

0
Filed under MySQL, php
Tagged as ,

PhpでMysql(innodb)を利用している場合に、
すごくはずかしい失態をおかしたので、
繰り返さないように、恥を公開しておこう。

autoCommit(false);

としてたわけですよ。
で、id を auto_increment するようなテーブルが複数あり、
それらを、insertとかしてたわけですよ。

でも、なぜかDBが更新されないわけですよ。

mysql_insert_id();

の関数を利用して直前のSQLのauto_incrementのIDを引っ張るわけですが、
これが、ちゃんとに取得できるわけですよ。
id が 100とかなってても、100のIDのレコードがテーブルに存在しないわけです。

もう全然わからないと思っていたところ、

commit()

部分を気持ちよく、綺麗さっぱりコメントアウトしてたわけです。
そりゃー 動くわけないですがな。

中途半端にまともなIDなんて返してくれちゃうから、
余計あせっちまいましたよ。

と、いったところで、自分のinnodbの扱いの認識不足と、
注意力不足が招いた結果ですけどね。。

ZendFrameworkでViewがないとエラーになりますよ。

8
Filed under php, Zend Framework
Tagged as

Hello Worldみたいな単純な表示すらでなかったら、ショックをうけますね。

ということで、ZendFrameworkで以下のエラーがでたので、
一応コメントを残しておく。

エラーは、Apacheのerror_logに出力されてました。
標準出力的には、まっ白い画面でした。

PHP Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in /usr/share/pear/Zend/Controller/Dispatcher/Standard.php:249\nStack trace:\n#0 /usr/share/pear/Zend/Controller/Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))\n#1 /public_htmlまでのPATH/index.php(14): Zend_Controller_Front->dispatch()\n#2 {main}\n thrown in /usr/share/pear/Zend/Controller/Dispatcher/Standard.php on line 249

【原因】
該当のControllerに対応したViewが存在しない場合などに表示されるようです。
他にも要因はあるんだろうけど、今回はこれでした。

/(APP用フォルダ)/controllers/IndexController.php (indexActionだったら)

が利用されている場合には、以下のViewを呼びにいくわけです。

/(APP用フォルダ)/views/scripts/index/index.phtml

要するに、
/(APP用フォルダ)/views/scripts までは固定で
index が Controllerの名前と紐づき、
index.phtml がActionの名前と紐づくわけですね。

まあ、僕のは、scriptsフォルダがなかったわけですが・・・・
初歩の初歩。 間違いとしては、下の下ですね。

※自動でレンダリング?しないようにしている場合には、大丈夫だと思う。

ZendFrameworkのおすすめ書籍


pearでSmarty & ZendFrameworkインストールする。

10
Filed under php, Smarty, Zend Framework
Tagged as , , ,

もともとSmartyは使ってたんですが、
Zend Frameworkも勉強を始めました。

ということで、面倒なくインストールする方法を書いておきます。
やっぱりphpまわりは、pearでインストールできると楽ですよね。

ということで、SmartyとZend Frameworkのpearでの設置方法です。

## Smarty

pear list
pear list-channels
pear channel-discover pearified.com
pear install pearified/Smarty
pear list-channels
pear list

## Zend Framework

pear list-channels
pear channel-discover zend.googlecode.com/svn
pear install zend/zend
pear list-channels

ただ、これをやっても、pear list で一覧に出てきません。。
どうしたらいいんでしょうね。。

この辺は、また何かわかったら、追記することにします。

ZendFrameworkのおすすめ書籍


CGI版PHPについて

0
Filed under php
Tagged as , , , ,

モジュール版ではなく、CGI版のPhpを使う場合、
(レンタルサーバを利用中でCGI版になってる場合)には、
特に何も設定をしなかった場合には、
phpの環境変数(php.iniで設定されてるもの)を変更できない。

モジュール版の場合には、.htaccessに「php_value」を書いてみたり
phpのソース(たとえばtest.phpみたいな)ものの中で「ini_set」をして
設定を上書きすることができる(1部の設定を除く)わけですが、
CGI版ではできないようですね。

phpinfoでみても「local」の部分が書き変わってないので、
効いてないってことですね。

実際に試してみましたが、できませんでした。

これを回避する一般的な方法としては、suPHPを利用する形っぽいですね。

詳細は以下のサイトにのってるようですぜ。

FlatEight.com >> FreeBSD/suPHP

Cent4&PHP5&Trac&Pythonの甘い罠

0
Filed under Apache, Cent, Linux, php, python, Trac
Tagged as , , , , ,

Cent4(CentOS4)系でTrac(Python&Sqlite)を使う場合に、
PHP5を利用していると、(pdo_sqlite)がconflict?するようで、
TracかPhpかどちらかしか動作しなくなる。

具体的には、yum版のApache2とかだと、
/etc/httpd/conf.d/php.conf とかで以下の記述がある場合、
Tracが動かなくなる。

LoadModule php5_module modules/libphp5.so

具体的には、ブラウザ上では、500エラーになり、
エラーログでは、以下のような出力がたくさんでる。

PythonHandler trac.web.modpython_frontend: DatabaseError: unsupported file format

で、上記のLoadModuleをコメントアウトすると、Phpは動かなくなるが、
Tracは動くようになる。

ということで、PhpでSqliteを使う予定がなければ、
以下のようにpdo_sqlite.iniを適当な名前にリネームしてあげればよし。

mv -i /etc/php.d/pdo_sqlite.ini /etc/php.d/pdo_sqlite.ini_org

その後、Apacheの再起動をお忘れなく。
yum版(rpm)のApacheの場合には、

/usr/sbin/apachectl restart

とかでいいですね。

で、以下のサイトを参考にさせてもらいました。

Ryuzee.com >> CentOS4でPHP4から5にするとTracが動かなくなる

言語ごとの真偽値について

1
Filed under perl, php, シェルスクリプト
Tagged as

ちょっと以前から困惑しているのが、
スクリプト実行後の「返り値」といいますか「ステータスコード」といいますか
「戻り値」といいますか、、 「真偽値」といえばいいですかね。

これが、言語によって違うわけですよ。
単純に脳みその中でおかしなことになります。

今まで自分がやってきたものでいえば、以下の3つしかないわけですけど、
3つでも脳みそがおかしくなります。

 シェルスクリプト : 0:真 1:偽
 perlスクリプト  : 0:偽 1:真
 phpスクリプト   : 0:偽 1:真

となっているわけですよ。

まあ、シェルスクリプトだけ違うと思えばいいのですが、
シェルとかコマンドライン操作を多くしていた為に、
ちょくちょく間違えます。 こまりものですね。
全部揃えてくれたらいいのに・・・

pythonとかrubyとかはどうなってるんだろ。
気が向いたら調べて追記しようと思う。

register_globalsについて

0
Filed under php
Tagged as

前々からregister_globalsはoffにすべきというのは
知っていたのですが、プログラマーになって
具体的にというか本気で困ることに気がついた。

そもそもregister_globalsがonだと、何ができるのかというと、

http://a.com/?mode=bbb

にアクセスした場合、簡単に書くと、

if ( $_GET["mode"] == “bbb” ){
    echo “test”;
}

みたいな感じでGETの値を使う訳ですが、
register_globalsがonだと

if ( $mode == “bbb” ){
    echo “test”;
}

でも同じように通ってしまうわけですね。
$_GETとか$_POSTのような特殊変数じゃなくても
値が入ってしまうわけです。

これってミスの元になるし、脆弱性にもなりえますね。
自分の意思で変更できる環境なら、やっぱり変更するべしですね。

 ## でも、事前検証は確実・十分に!