トップページphp
1001コメント307KB

くだすれPHP(超初心者用)5

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/11/22(土) 06:36:02ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
http://www.php.net/
http://jp.php.net/



くだすれPHP(超初心者用)4
http://pc11.2ch.net/test/read.cgi/php/1213356756/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
0302nobodyさん2008/12/22(月) 18:21:33ID:???
マニュアル嫁
0303nobodyさん2008/12/22(月) 18:26:34ID:???
どっかから小さめなスクリプト落してきて、
「なんで?なんで?なんでこうなるの?」と思いながら丁寧に読んだり、
チョっとした機能を追加してみたりして、
いろいろもがくといいんじゃないだろうか。
0304nobodyさん2008/12/22(月) 20:08:10ID:???
初心者が読めるようなちょっとしたスクリプトは大抵がPHP4時代の糞CGIで変な癖がついたりする罠。
グローバル空間にexplodeしてたりするスクリプトが多すぎる。
0305nobodyさん2008/12/22(月) 20:09:08ID:???
explode→extract
0306nobodyさん2008/12/22(月) 20:09:52ID:???
>>304
それがどうしたの。
0307nobodyさん2008/12/22(月) 20:18:07ID:???
んなの読まなきゃいいだろ
0308nobodyさん2008/12/22(月) 22:15:31ID:???
>>299
初めてのプログラミングがPHPで、配列/連想配列でこけたけど、しばらくしてからやってみたらすぐ理解できた。
あんまり根詰めないで気楽にまったりやるといいよ。
読むだけじゃなくて手も動かすといい。
サンプル丸写しして、いろいろ自分で弄ってみるんだ。
エラー出ればメッセージ出て何が原因かすぐわかるしね。
03092992008/12/22(月) 22:16:58ID:W3OrxKsT
>>303
どっかから?
どっかから?そのどっかから?はどっかから?
つまり僕が言いたいのはどっかから?なんです。お願いします。

03102992008/12/22(月) 22:39:19ID:W3OrxKsT
>>308
( ´_ゝ`)フーン
「どうもありがとう」って言っといてだってお兄ちゃんが
妹より
0311nobodyさん2008/12/22(月) 22:51:01ID:???
で、どう書いたら>>304さんに変な癖がついてると言われない書き方なのよん
正しい書き方教えてくりっ
0312nobodyさん2008/12/22(月) 22:59:57ID:???
PHPの公式マニュアルで「非推奨です」「危険です」と書かれている書き方を全て避ける。
0313nobodyさん2008/12/22(月) 23:00:21ID:???
変な癖が付いてると言われなければいいのか
0314nobodyさん2008/12/22(月) 23:04:23ID:???
>>304 みたいな奴には何を見せても重箱の隅つつかれるよね。
スルーでいいとおもう。
0315nobodyさん2008/12/22(月) 23:15:14ID:zcPu3Ss9
PHP4用の開発ノウハウってのがあって、これは今となってはバッドノウハウ。
PHP5のみサポートの有名なFWで開発してみて、動いたらソースを読むのが吉
0316nobodyさん2008/12/23(火) 00:46:09ID:???
ノウハウ以前のレベルだろうに
0317nobodyさん2008/12/23(火) 02:41:59ID:???
いまだに共用鯖じゃPHP4主流だもんなあ。
0318nobodyさん2008/12/23(火) 03:56:34ID:207JnJAg
JavaScriptの"for〜in"構文をPHPで書くとどうなるのでしょうか
PHPはあまり分らないもので
0319nobodyさん2008/12/23(火) 04:00:08ID:???
>>299
漏れは先にperlを2ヶ月やってから
PHPに移動した。
0320nobodyさん2008/12/23(火) 04:13:36ID:???
>>318
マニュアル
0321nobodyさん2008/12/23(火) 13:04:10ID:???
>>318
$array=array('name'=>'aki','age'=>23,'karesi'=>'futsu');
foreach($array in $key=>$item) {
echo "$key $item\n";
}
0322nobodyさん2008/12/23(火) 13:54:23ID:???
単にforeach文て言えば済むじゃねぇかw
03232992008/12/23(火) 17:39:32ID:???
>>319
何でですの?教えてごらんなさい
0324nobodyさん2008/12/23(火) 17:43:37ID:???
ご先祖様だから
0325nobodyさん2008/12/23(火) 18:14:25ID:???
ご先祖様はCだろw
0326nobodyさん2008/12/23(火) 18:37:45ID:???
そこまで戻る必要は無い

ってか、Cは却って難しい
0327nobodyさん2008/12/23(火) 20:41:02ID:???
SQLite3ってPDOってやつを使ってアクセスするんですよね
マニュアルにあるSQLite3ってやつとは何が違うんでしょうか
0328nobodyさん2008/12/23(火) 20:45:19ID:???
別にPDOじゃなくてもアクセスできるけど
0329nobodyさん2008/12/23(火) 21:06:01ID:???
なるほど
ググってもPDOのことしか見当たらずそこからマニュアルに流れ着いて
SQLite3文?って物があるのを知ったのでどういった違いがあるのかなと思ったのですが
どっちを使っても構わないってことでしょうか
0330nobodyさん2008/12/23(火) 21:06:50ID:???
うん
0331nobodyさん2008/12/23(火) 21:19:15ID:???
わかりました
どちらがいいのかはわかりませんが、せっかくなのでSQLite3も使ってみます
0332nobodyさん2008/12/23(火) 21:44:59ID:???
DBっていうのは、MySQLとかSQLiteとかPostgreSQLとかOracleとか、似たようなのがたくさんある。
元々はそのそれぞれに対して、よく似てるけどちょっとずつ形の違う関数がいっぱいあった。
で、それが不便だからって事で、「同じ書き方でどれにでもアクセスできるような仕組みを作ろう!」となった。
それがPDO。

PDOを使って書かれたプログラムは、DBがSQLiteからMySQLに変わっても、PDOクラスをnewしてるところだけ書き換えれば普通に動く。
また、PDOひとう覚えれば、どのDBでも使えるようになる、というメリットもある。
0333nobodyさん2008/12/23(火) 21:50:29ID:???
普通DSNを書き換えるんだろ
0334nobodyさん2008/12/23(火) 21:50:51ID:???
じゃあ自由度は下がるってことでFA?
0335nobodyさん2008/12/23(火) 21:57:29ID:???
ひとう → ひとつ

これだけだとバランス取れないので、一応デメリットも。
全DBでなるべく共通の操作を提供する、という仕組みのため、一部のDBに固有の機能が使えなかったりする事がある。
よくある話だと、MySQLの持続的接続が使えなかったりな。あと、パフォーマンスでもPDOは若干劣る。

個人で使う最大のメリットは、プリペアドステートメントのサポートだと個人的に思う。
SQLインジェクションの危険性をほぼゼロにできる上に、プログラムの可読性も上がる。
0336nobodyさん2008/12/23(火) 21:58:54ID:???
> よくある話だと、MySQLの持続的接続が使えなかったりな。

それってパフォーマンスに影響するんだっけ?ベンチとった?
0337nobodyさん2008/12/23(火) 22:14:41ID:???
PDOは文字コード変更用の関数がないからなー……。
SET NAMES 危ないって聞くし。
03383352008/12/23(火) 22:49:27ID:???
>334
んな事いったら、sqlite関数やmysql関数を使ってしまえば、将来のDB変更の自由度が失われるわけだが。
俺は自由度や性能云々以前に、DB依存のコードがそこら中にあるのを気持ち悪いと感じる。そんなものはどっかで隠蔽されるべきだ。
(実際問題、DBを置き換えるなんて事態は普通ないだろうけどな)
0339nobodyさん2008/12/23(火) 22:58:50ID:???
>>338
あたまでっかちおっさんどっかいけよ
0340nobodyさん2008/12/25(木) 05:23:16ID:???
>>339
335, 338の発言を理解できないなら発言するな。
339的な発言は、このスレの害虫。
0341nobodyさん2008/12/25(木) 05:57:49ID:???
>>PDOを使って書かれたプログラムは、DBがSQLiteからMySQLに変わっても、
>>PDOクラスをnewしてるところだけ書き換えれば普通に動く

SQL文自体がDB固有になるだろうから、現実的にそれはあり得ないんじゃないか?
(標準SQLだけで書かないでしょふつう)

俺的なPDOのメリットは、DB関連関数をどのDBにも共通で使えるため開発の学習量を
減らせること。これはソースコードの可読性の向上、メンテ性の向上にもなる。
0342nobodyさん2008/12/25(木) 18:01:58ID:???
標準SQLだけで書かないのが普通という前提なら、共通で使える部分の学習量なんてほとんど0じゃないか?

0343nobodyさん2008/12/25(木) 20:20:04ID:???
DBを変更する予定があるとき、
単純にPDOだけで実現できるわけじゃぁないが、
PDOで標準SQLだけを使うか、
PDOよりも抽象化したFWを使うわけで、
素の関数を使うよりは汎用性が高い。

どっちの言うことも大きく間違っちゃいないわな
0344nobodyさん2008/12/29(月) 23:28:23ID:hqhRjo69
オブジェクトのメソッド名とプロパティ名の一覧ってどうやって取得したらいいんでしょうか?
0345nobodyさん2008/12/29(月) 23:37:49ID:???
リフレクション
03463442008/12/30(火) 12:21:58ID:???
>>345
有り難うございます
おかげで3週間越しの問題が解決しました
本当に有り難うございます
0347nobodyさん2008/12/31(水) 11:35:34ID:???
phpの質問かJavaScriptの質問か迷ったのですが、ボタン(button)がクリックされた時に
確認用のダイアログを出すにはどうすれば良いでしょうか?


実行しますか?
【OK】 【キャンセル】

※ダイアログを表示し【OK】が押された場合のみ
submit処理を行ういたいです。
0348nobodyさん2008/12/31(水) 11:47:59ID:???
>>347
超JavaScript
ググれば死ぬ程出てくる
一番最初に引っかかったページ http://promptbox.jp/blog/memo/index.php?itemid=785

お年玉くれw
0349nobodyさん2008/12/31(水) 12:38:49ID:???
>>348
ありがとうございます。
でもお金ないです。。。
0350nobodyさん2008/12/31(水) 12:39:59ID:???
つI
0351nobodyさん2008/12/31(水) 13:25:47ID:???
つD 御縁がありますように。
0352nobodyさん2008/12/31(水) 13:30:12ID:???
っH
0353nobodyさん2008/12/31(水) 16:42:47ID:???
htmlかphpかわからないのでこちらで質問です。
formのプルダウンメニューの値を送信ボタンで渡すのはわかるのですが
プルダウンで選択しておいてリンクをクリックしたときにその値を一緒に
送るような使い方はできるのでしょうか。
ようはメニューでレイアウトの種類を選択して、リンク先をそのレイアウトで
表示させるといったことをしたいのですが。
0354nobodyさん2008/12/31(水) 17:24:24ID:???
php関係無し
0355nobodyさん2008/12/31(水) 18:25:42ID:???
そうですか、phpで操作できたらよかったんですが。
その後ググってるとJavaScriptでメニューの値が取得できるようですので
これとonClickだかでどうにかできるのかなってことでJSはわからないんですが
少し勉強してみようとおもいます
スレ違い失礼しました。
0356nobodyさん2008/12/31(水) 18:29:31ID:???
JavaScriptのほうが最適ではあるだろうけど
工数増えるけどPHPでできないこともない
まぁガンガレ
0357nobodyさん2008/12/31(水) 18:57:38ID:???
素直にやるならJavaScriptだろうな。
プルダウンを変更した時点でリンク先を書き換えるか、クリック時にフォームのsubmitイベントを呼び出すか。
0358nobodyさん2008/12/31(水) 18:59:09ID:???
>>353
リンクにonclickといれてsubmitさせてやればいい
0359nobodyさん2008/12/31(水) 19:01:23ID:???
俺ならselectが変更された時点でJavaScript経由でcookieに表示設定を放り込む。
一度選択したら2回目以降は覚えていて欲しいだろうからな。
0360nobodyさん2008/12/31(水) 19:49:56ID:???
URLに数字等を入れる事により1つのphpページ画面をそのパラメータによりページの内容を
変えたいと思います。

どうすれば同一phpページをパラメータURLを指定する事により表示内容を変更する事が出来ますか?

http://www.test.php=1234
http://www.test.php=1235


0361nobodyさん2008/12/31(水) 19:52:15ID:???
httpのクエリストリングから調べろ
0362nobodyさん2008/12/31(水) 20:01:42ID:???
>>360
http://www.example.com/?page=1234
こういう形なら$_GET['page']で1234が取得できるから
これを使って切り替えれば良い
ただしpage=1234の1234は誰でも値を入れる事ができるから
チェック等は必ずするように
03633602008/12/31(水) 20:14:49ID:???
>>361
ヒントをありがとうございます。

>>362
詳しくご解説頂きありがとうございました。
早速「ガキ使い」を見ながらプログラミングしてみようと思います。
0364nobodyさん2009/01/03(土) 12:58:05ID:???
phpでシステム開発をする場合には通常次の階層の直下に*.phpファイルを置いて
動作確認を行いますよね?
  C:\Program Files\Apache Software Foundation\Apache2.2\htdocs

しかし、1つのPCで複数サイトの開発を行う場合には、次の用にフォルダを切った上で
開発を行っているのですが、この方法は正しいですか?

  C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\site1
  C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\site2

※要するに動作確認をする場合には次の用にしなくてはならないので。(まっ、これしか方法は無いかな?)

  http://localhost/site1/index.html
  http://localhost/site2/index.html
0365nobodyさん2009/01/03(土) 13:04:40ID:???
hosts にサイト名追加して、VirtualHost つかうとかもあるな。
0366nobodyさん2009/01/03(土) 13:12:49ID:???
俺はZF使ってるからmod_rewrite
0367nobodyさん2009/01/03(土) 13:20:37ID:???
使ってれば偉くなった気になるんですね。わかります。
0368nobodyさん2009/01/03(土) 13:31:35ID:???
お前は何を言ってるんだ
0369nobodyさん2009/01/03(土) 13:31:42ID:???
俺も毎日ちんこ使ってるので偉くなった気になっています。
0370nobodyさん2009/01/03(土) 13:45:12ID:???
>>365
LinuxじゃないとVirtualHostは使えないのではないですか?
それともWindows環境でも出来るのですか?

>>366
取り敢えず、
  http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html
のサイトで勉強してみようと思います。

実務でphpを使ったWEBサイトの開発とかした事が無いのですが、
実務でphpで開発を行う場合にテキストエディタだけを使っているプロジェクトは少ないですか?

あと、複数サイトの開発を1台のPCで行う場合に、>>364みたいな感じで行うのは
能率が悪いでしょうか?
0371nobodyさん2009/01/03(土) 13:53:14ID:???
>>370
べつにWindows環境だってIPベースでも名前ベースでもできるさ
0372nobodyさん2009/01/03(土) 13:54:52ID:???
Apacheの話題はスレ違い
0373nobodyさん2009/01/03(土) 13:57:42ID:???
>>370
人の話を疑うぐらいなら聞くな >>364の形で運用するわけじゃないんならダメだろ。 >>365がFA
0374nobodyさん2009/01/03(土) 14:00:48ID:???
おれは常にテキストエディタ(Vim)と過去の開発資源(ライブラリ)だけで事足りてる
0375nobodyさん2009/01/03(土) 14:19:04ID:???
んんんだこのgdgdはw

複数サイトをプロジェクト(複数人数)でやるんだから、ファイルのアップロード方式の方が重要。複数の人間がftpでアップするのなら、それを管理しやすい方法で

あと、htdocs/aaa/bbb/ とかでやった場合、mod_rewrite の RewriteBase が後でアレな時あり

プロジェクトを管理できれば良いので、エディタは何でもいい



0376nobodyさん2009/01/03(土) 14:38:30ID:???
複数の人間が更新するならCVSとか使うかなあ
サイト側もcheckoutするのだ
0377nobodyさん2009/01/03(土) 14:55:16ID:???
checkoutじゃなくて、exportな
0378nobodyさん2009/01/03(土) 14:59:27ID:???
>>371 〜 >>375 あざーす。
ぐぐって勉強してみます。
0379nobodyさん2009/01/03(土) 15:57:48ID:???
Subversionを使っているのに何故かデプロイがftp経由ファイル単位なうちのプロジェクトは滅ぼしていいと思う。

>370
同時にいじるなら、何も考えずにやってるとアクセスログが同じファイルになってしまうので、やりづらいと思う。
そのままでもできるけど、バーチャルホストの方がエラーログの切り分けが簡単。
あとは両プロジェクトで同名のクッキーを使った場合衝突が発生する点かな。セッション周りが特に危険。
あと、本番環境に持っていく際に、相対リンク/絶対リンクとか周りで絶対いくつかリンク切れが発生すると思う。
以上のような点を気にしなくて良いのならば、そのままでもいいんじゃない?
03803792009/01/03(土) 16:44:44ID:???
ああ、そもそもセッション変数が共有されてしまう点の方が問題か。
クッキーは発行パスを適切に指定すれば混ざらないが、本番環境への移行の際に適切な修正をする必要がある。
0381nobodyさん2009/01/12(月) 12:35:49ID:???
パール互換の正規表現についてなのですが、
preg_matchなど公式マニュアルに出ている内容については理解したのですが、
Perlとは微妙に違うリテラルやトークンの使い方について詳しく説明してある
ドキュメント等はないでしょうか?
0382nobodyさん2009/01/12(月) 13:43:52ID:???
PHPって確か鬼車使っているんだっけ
だとしたら
ttp://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
補記 3. Perl 5.8.0と比較して存在しない機能
+ \N{name}
+ \l,\u,\L,\U, \X, \C
+ (?{code})
+ (??{code})
+ (?(condition)yes-pat|no-pat)
* \Q...\E
但しONIG_SYNTAX_PERLとONIG_SYNTAX_JAVAでは有効
0383nobodyさん2009/01/12(月) 15:24:30ID:???
ありがとうございます!
参考にメモさせていただきました
0384nobodyさん2009/01/13(火) 02:11:38ID:???
くだらない事なんですが、一つ気になっている事があります。
PEAR::Logでログでログ管理をしようと思っているのですが、
手元の参考書やWebで調べると、解説のサンプルプログラムが

<?php
require_once 'Log.php';
$file = &Log::factory('file', 'out.log', 'TEST');
$file->log('ログ内容');
?>

みたいな場合が多いのですが、この場合Log::factoryで作成した
インスタンス(?)の$fileは明示的にcloseか何かしなくて言いのでしょうか?
例えば、普通のファイル操作ならfopenしたら最後はfcloseをするので、
Log::factoryもそれに該当する操作が必要ないのか?と気になりましたので・・・・
0385nobodyさん2009/01/13(火) 03:08:48ID:???
マニュアル嫁
0386nobodyさん2009/01/15(木) 22:20:46ID:???
テキストファイルを読み込んで一行ごとに配列に入れ
配列を検索して特定の文字が含まれていた場合そのインデックスを返す
っていうのをやりたいのですが、わかりません。よろしくお願いします。
インデックス1を返して欲しいんですが、何も返ってきません。

***テキストファイルの中身*******
群馬県
栃木県
茨城県
埼玉県
東京都
****************************

<?php
//ファイルを開く
$filename="test.txt";
//配列に代入する
$f1=file($filename);
//特定の文字が含まれる要素を探す
$word="栃木県";
$key=array_search($word,$f1);
print($key);
?>
0387nobodyさん2009/01/15(木) 22:27:13ID:???
返り値
ファイルを配列に入れて返します。 配列の各要素はファイルの各行に対応します。改行記号はついたままとなります。 失敗すると file() は FALSE を返します
0388nobodyさん2009/01/15(木) 22:28:50ID:???
$word="栃木県\n";
0389nobodyさん2009/01/15(木) 23:00:30ID:???
>>387
>>388
レスありがとうございます。

この検索の場合は完全に一致するものしか検索できないんですね。
例えば
$word="玉";
とした場合に
埼玉県のインデックスの3を返すというのは無理なんでしょうか?
0390nobodyさん2009/01/16(金) 00:17:00ID:???
>>389
データーベースに入れて
「like」検索をすればできる。
0391nobodyさん2009/01/16(金) 07:02:26ID:???
>>389
DBなんて使わなくてもstrposでできる
0392nobodyさん2009/01/16(金) 15:17:30ID:???
>>391
strposって、最初に出てきた位置を返す関数じゃない?

「あるかどうか」を調べる関数のほうがいいんだけど。
0393nobodyさん2009/01/16(金) 15:19:44ID:???
最初に出てくる=ある
0394nobodyさん2009/01/16(金) 16:25:58ID:???
strposで位置取得
そこまでに\nがいくつあるか
ウマー
0395nobodyさん2009/01/16(金) 23:23:04ID:???
俺なら何も考えず配列に格納→foreachでループ→中でstrpos

>392
strposは文字列検索としては最速の部類。
他の選択肢はpreg_match位しかないが、preg関数とstr関数じゃお話にならんほど速度が違う。
0396nobodyさん2009/01/16(金) 23:24:33ID:???
説得力を持たせるためにベンチマークを載せてはどうかね?
0397nobodyさん2009/01/16(金) 23:28:16ID:???
自分でやれ
0398nobodyさん2009/01/17(土) 11:25:45ID:???
>>396
395ではないが暇なので作ってみた

$imakara_ikude = microtime(TRUE);

$dokowo_sawatte_hosiinya = '検索対象にしたい任意の文字列';
$kokoga_eenka = '検索したい任意の文字列';
$kokoga_eenka_pattern = '/' . preg_quote($kokoga_eenka, '/') . '/';
$itte_itte_ikimakuru = 100000;

for ($i = 1; $i <= $itte_itte_ikimakuru; $i++) {
if (strpos($dokowo_sawatte_hosiinya, $kokoga_eenka) !== FALSE) {}
// if (strstr($dokowo_sawatte_hosiinya, $kokoga_eenka)) {}
// if (preg_match($kokoga_eenka_pattern, $dokowo_sawatte_hosiinya)) {}
}

$doya_yokattaka = microtime(TRUE) - $imakara_ikude;
echo $doya_yokattaka;

■結果 - Windows XP(ペン4 3.2GHz)+XAMPP(PHP5.2.2)
strpos():0.060ぐらい
strstr():0.052ぐらい
preg_match():0.28ぐらい

strstr()の方が微妙に早いが、公式マニュアルでstrstr()の説明見ると
strpos()使えカスと書いてるので俺は素直にstrpos()使う。
0399nobodyさん2009/01/17(土) 11:38:45ID:???
>>392
というわけで、
if (strpos($str, 'search') !== FALSE)
を使え。必ず「!== FALSE」にするように。理由は説明ダルいからマニュアル見れ。

>>389
$index = FALSE;
$word = '玉';

if ($ary = file('test.txt')) {
foreach ($ary as $key => $val) {
if (mb_stripos($val, $word) !== FALSE) {
$index = $key;
break;
}
}
}

var_dump($index);


strpos()はマルチバイト対応してないので、mb_系使うように。
0400nobodyさん2009/01/17(土) 11:43:51ID:???
>>399で書き忘れたが、大規模検索なら素直にDB使う。

>>384
気持ち悪いなら明示すりゃいい。というか、色んな意味で明示したほうが良いと俺は思う。
phpは、リソースのオープンは明示しなくても自動的に閉じてくれる。(ファイルであれDBであれ)

>>382
PHP5から鬼車。mb_ereg()系で。
preg_match()では使われてないのでは?
0401nobodyさん2009/01/17(土) 11:53:04ID:???
お前らJavaとPHPのスキルを比率で示してくれ。

俺の場合

Java : PHP = 5 : 5

ただ、レンタルサーバ代がJavaだと高いから力配分を
1:9程度に持って行こうかと思ってる。

■ このスレッドは過去ログ倉庫に格納されています