【PHP】質問スレッドpart32【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/01/03(火) 17:18:20ID:???【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。
過去スレ、関連リンク、FAQ等>>2-10辺り
0002nobodyさん
2006/01/03(火) 17:19:00ID:???http://pc8.2ch.net/test/read.cgi/php/1133017632/
【PHP】質問スレッドpart30【php】
http://pc8.2ch.net/test/read.cgi/php/1130190606/
【php】part29【php】
http://pc8.2ch.net/test/read.cgi/php/1120611474/l50
【PHP】質問スレッドpart28【php】
http://pc8.2ch.net/test/read.cgi/php/1115281031/l50
関連リンク
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
0003nobodyさん
2006/01/03(火) 17:19:34ID:???【PHP】下らねぇ質問はここに書き込みやがれpart14
http://pc8.2ch.net/test/read.cgi/php/1134868212/
【PHP】PEAR Part2
http://pc8.2ch.net/test/read.cgi/php/1122899232/l50
[PHP]フレームワークについて語るスレ2[総合]
http://pc8.2ch.net/test/read.cgi/php/1135847024/
【Smarty】PHPのテンプレートエンジン【Flexy】
http://pc8.2ch.net/test/read.cgi/php/1118799352/l50
[PHP-users MLヲチ8]巣もいませんでした。
http://pc8.2ch.net/test/read.cgi/php/1132800251/
正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/l50
Webでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1133489897/
関連板
データベース(SQL、DBMSの話題はこちら)
http://pc8.2ch.net/db/
プログラム(CLI、アルゴリズム、インタプリタの話題はおそらくこちら)
http://pc8.2ch.net/tech/
Web制作(クライアントサイドの話題は問答無用でこちら)
http://pc8.2ch.net/hp/
0004nobodyさん
2006/01/03(火) 17:20:17ID:???1. ブラウザに何も表示されないんだけど・・・
→ error_reporting、display_errors、log_errors
2. include/requireに?a=b&c=dのようなパラメータつけたい
→ できません
3. $a1,$a2,$a3...はどうしたら?
→ 可変変数・・・というかむしろ配列使え
4. echo "$arr['hoge']['fuga']"; がうまくいかない
→ {おっぱい括弧}でくくれ
5. echo?print?
→ echoはコンマ区切りで書ける。printは関数。パフォーマンスは気にするな
6. 値渡し・参照渡しのパフォーマンス
→ これまた気にするな
7. csvやtsvを扱いたい
→ まずはfgetcsv
8. ファイル入出力関数(fopen等)でリモートファイル扱う際の限界
→ fsockopenでソケット通信で解決
9. 一定時間ごとに何かしたい
→ cron、タスクスケジューラ
10. 画像処理一般 or GDの限界
→ ImageMagick
11. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
12. クッキーの情報をユーザから隠したい
→ セッション使え、ただしクッキーとセッションは仕組みが違うから同じように扱うな
0005nobodyさん
2006/01/03(火) 17:21:32ID:???1. ハードウェア、OSのバージョン等には一字一句触れない。
2. 大切な個人情報が漏れるとまずいので、己の行った操作、変更などは秘密。
3. エラーメッセージの類は決して書かない。「エラーが出るんです」で留める。
目の前で生じている現象をそのまま具体的に書くなどもっての外。
事実より俺様の脳内解釈を優先すべし。
4. 独り言文体で必勝。
「…なんだけど、どうすればいいのかなぁ」「何が悪いんだろう?」
5. 「急いでいます」「困っています」等、自分の都合を全面に押し出す。
6. もう試したことを得意げに指摘してくる奴には、厳しく対応。
「それが駄目だったから質問してるんです」「それはもう試してみて駄目でした」
"どう"だめだったのか、本当に実際それを行ったかどうかなんか問題じゃない。
7. ストレートに答えを書かないもったいぶったレスには、逆切れで対応。
「だからどうすればいいんですか?」「分からないなら引っ込んでろやゴルァ」
示されたURL等を参照するなんて態度は、回答者を甘やかすことに他ならないので
絶対に避ける。
8. 情報は小出しに。
「エスパーきぼんぬ」 補足
上の八ヵ条を「一つでも」満たす者は質問者として不適格だということだ。
そのような悪い質問に対して答えられるのは,
質問者の意図をすべて汲み取ることのできるエスパーでもなければムリ,
という意味であって,決して,高度な技術を持つユーザに対する尊称でなはい。
まちがっても「エスパーの方,回答お願いします」なんて痛い質問するな。つーかカエレ。
0007nobodyさん
2006/01/03(火) 18:58:00ID:???※サーバで利用可能なモジュール及び関数リストの取得方法
<?php
foreach (get_loaded_extensions() as $module)
{
echo "<b>[". $module ."]</b><br>";
foreach (get_extension_funcs($module) as $func)
{
echo $func ."<br>";
}
}
?>
[standard]以下はPHPの標準関数。それ以外はオプション。
0008nobodyさん
2006/01/03(火) 20:07:00ID:???作成すると、どうしてもphpファイルにデータベースへ接続する
ためのパスワードなんかを記載する必要性が出てくるかと思いますが、
回避方法ってないでしょうか?
セキュリティ的に結構不安です
0009nobodyさん
2006/01/03(火) 20:11:32ID:???パスワードを使いたいがパスワードを使いたく無いってことだな
0011nobodyさん
2006/01/03(火) 20:48:03ID:???>libmysql.dll は PHPとMySQLにあるものどちらを
>使うのが吉?
MySQLにバンドルされてるlibmysql.dllは古いものだけど
PHPのMySQL拡張はそれでQAされてるので、基本的にバンドル
されてるものを使うのが吉。PHP5ならMySQL4.1.7リリース時のものなので
(多分PHP4の頃と同じで、多分これがずっと使われる)
その範囲でMySQLが利用できる。
0012nobodyさん
2006/01/03(火) 21:01:47ID:???MD5辺りで暗号化して書いとくとか。
外部PHPファイルやデータファイルにしてDOCUMENT_ROOTより
上のディレクトリに置く手もあるけど、主目的はメンテ効率であって
セキュリティ的にはあんまかわらんな。
0013nobodyさん
2006/01/04(水) 02:38:47ID:???そこで、更新された文章の一部を取得して表示させたいのですが、
こういう事は可能ですか?
可能ならどのような関数使えばいいのかお願いします。
0015nobodyさん
2006/01/04(水) 07:31:58ID:???Windowsクライアントで文字を入力して送信し、
それをEUCで書かれたPHPソースが受け取ったら
その受け取った文字の文字コードは
sjisでしょうか?
それともutf-8?
まさかeuc?
0016nobodyさん
2006/01/04(水) 07:39:36ID:???php_value default_charset
php_value mbstring.internal_encoding
0018nobodyさん
2006/01/04(水) 08:36:27ID:???誘導しますよ
http://pc8.2ch.net/test/read.cgi/hack/1131317930/
0019nobodyさん
2006/01/04(水) 08:45:36ID:???POSTされたデータは投稿フォームと同じエンコードでサーバーに渡される。
サーバーはPHPの設定(>>16の項目)に従ってスクリプトにPOSTデータを渡す。
要はちゃんと設定しておけば作成者側が心配する必要はないってこった。
デフォルトで値も入ってるしな。
0020nobodyさん
2006/01/04(水) 09:28:22ID:???ブラウザがそのページの文字コードに従って送信してくれるってのは、まあ通常間違いないだろうね(ブラウザをどこまで信用するかはターゲットのユーザ層次第)。
ただ、POSTされたデータがmbstring.internal_encodingに自動的に変換されるのはmbstring.encoding_translationがオンの場合。
これデフォルトではオフだから。
>>15
スクリプトの側でmb_convert_encoding()を使うか、php.iniのエントリーを設定しておくか等、マニュアルよく読んで最適な設定をしましょう。
DB(またはデータファイル)にどんな文字コードで保存するかにもよるし。
一番楽なのは言うまでもなく、全部デフォルトの設定で文字コードは全て一つに統一。
一番信頼性が高いのはphp.iniをちゃんと設定することだね。
002115
2006/01/04(水) 09:53:43ID:???>>20
なるほど。ありがとうございます。
DB内データはEUC、HTML出力はUTF-8、
という前提でPHPを書かないといけなかったので、
頭がクラッシュしてましたが、とても鮮明になりました。
002213
2006/01/04(水) 14:11:58ID:???返事ありがとうございます。
普通、更新内容をチェックするのは、RDFかXMLファイルだと思いますが、
htmlやphpといった拡張子のページの更新部分を抜き取る物を作りたいんです。
その場合、fopen()やfgets()では、無理ですよね?
どうすればいいのでしょうか?
0024nobodyさん
2006/01/04(水) 14:52:35ID:???普通にdiffで比較するとか。
あとPearのText_DiffとかPECLにxdiffとかいう拡張モジュールあるから試してみたら?
0025nobodyさん
2006/01/04(水) 14:55:58ID:???0026911
2006/01/04(水) 14:59:18ID:ewHclrX7pear HTTP_RequestでHTTP_responsecode 304 200 を調べる(必須)
そのうえで。
fgets でファイルサイズ比較。
XMLでもRDFでも同じ事。
いちいちXMLをDOMparseして日付抜いてたら処理が持たない。
0027nobodyさん
2006/01/04(水) 16:20:26ID:???0028nobodyさん
2006/01/04(水) 16:25:57ID:???0030nobodyさん
2006/01/04(水) 16:43:28ID:???0032nobodyさん
2006/01/04(水) 18:55:04ID:???fopen()やfgets()「だけ」では難しいというだけで
少なくともこれら(もしくは同機能の関数)は必要。
その上で差分を比較する方法を考えなければならない。
新旧のページ内容をfgets()使って配列に格納した上で
array_diff()でもかけたら?
0035nobodyさん
2006/01/05(木) 06:32:10ID:m56cMN8+特定の行目だけ抽出する関数は無いでしょうか。
56.log の3行目を抽出して出力、というように使いたいのですが
0036nobodyさん
2006/01/05(木) 06:42:45ID:???1行ずつ読み込んでいって指定行数目で出力して抜けるか、
全部を配列に読み込んで3行目の要素を出力するか、
TPOに応じて好きな方を選べば?
0037nobodyさん
2006/01/05(木) 07:47:15ID:m56cMN8+ありがとうございます。後者の方法で全データ格納後
目的の行目を抽出することに成功したのでそちらを利用します。
0038nobodyさん
2006/01/05(木) 09:52:25ID:???0039nobodyさん
2006/01/05(木) 10:19:59ID:???いまさらだけど。
元のページがどういう作りなのかによって RSS 生成の方法
というか、生成に必要なデータのいじり方が変わってくる。
HTML の更新部分を抜き出そうとするなら少なくとも
1. 旧バージョンがどこかに残っている必要がある
2. HTML の解析ができる
必要があるけど、その辺は大丈夫なん?
とりあえず内容は置いといて更新されたページ一覧を作る
ことにしたら? それならタイムスタンプを見るだけで
いいし、一覧を RSS のフォーマットで吐き出すだけだから。
004013
2006/01/05(木) 23:09:20ID:???いろいろ指摘された物を使い作ってみようと思ったのですが、自分の能力のなさに結局挫折しました。
もうちょっと、PHPを詳しく学んでから作ろうと思います。
今回は、>>39さんの言うように、一覧だけにしておきますm(_ _)m
0041nobodyさん
2006/01/07(土) 02:36:18ID:???適当なスレ知ってたら誘導希望。
0042nobodyさん
2006/01/07(土) 08:04:13ID:???外部サイトのHTMLを整形して自分のサイトで表示、みたいな話なら正規表現で切り出す方がいいんじゃないかな?
パースってのは入力されたものが文法的に正しくなければ一切の意味を成さないからHTMLに対してはブラウザのエンジン並みに強力なパーサが必要になってしまう。
もし対象がXMLだったらパースするのが普通だろうけどね。
整形する必要がないならリダイレクト。
通常はこれで十分。
0043nobodyさん
2006/01/07(土) 11:17:32ID:???いずれにしても HTML をいじるのはあんまりやりたくないな。
今なら RSS だけでも結構な情報量になるし、その方がよくね?
少なくとも Valid XHTML ならずいぶんマシなんだがな。
0044nobodyさん
2006/01/07(土) 12:21:03ID:/OfH2StE0045nobodyさん
2006/01/07(土) 12:34:48ID:???0046nobodyさん
2006/01/07(土) 22:10:10ID:???0047nobodyさん
2006/01/07(土) 22:36:41ID:???外部サイト参照して、抽出に必要な部分ってサイトによるしそれも頻繁に変わるし、
頑張ってHTMLパースなんてしても無駄じゃない?
普通に「現時点でのHTMLの記述」から範囲指定のキーワードになりそうなの見つけて
それを正規表現で引っこ抜くくらいしかできないよね。
0048nobodyさん
2006/01/08(日) 15:23:09ID:???例:
flock($fp, LOCK_EX);
exit;
0050php developer teams
2006/01/08(日) 18:45:01ID:ctzaqlQU0051nobodyさん
2006/01/08(日) 18:54:37ID:???そんな変なことは普通しない^^;;
つmysql_escape_string
0052nobodyさん
2006/01/08(日) 18:58:31ID:???それを考えるのがお前の仕事だろうが!
0054php developer teams
2006/01/08(日) 22:00:48ID:ctzaqlQUで、どうしたらいいのかなぁ〜って。
0055nobodyさん
2006/01/08(日) 22:02:33ID:???0058php developer teams
2006/01/09(月) 02:00:58ID:b1yfGQKW0059nobodyさん
2006/01/09(月) 02:11:59ID:???0060php developer teams
2006/01/09(月) 02:42:32ID:b1yfGQKW//
$sql = "UPDATE 2ch SET bbs = '".$bbs."' WHERE userid = '".$userid."'";
mysql_query($sql,$con);
でいいのかなぁ?一応。
0061nobodyさん
2006/01/09(月) 02:54:33ID:???print $sql;
を入れて出力結果を見せてくれ。$bbs部分に「=」が含まれてるか?
0062php developer teams
2006/01/09(月) 03:04:17ID:b1yfGQKWためしに'と¥を入力してみたけど\' と \\に変換してあった。
ただ=がなぜ省かれているのかが意味不明。
0063php developer teams
2006/01/09(月) 03:07:22ID:b1yfGQKWUPDATE 2ch SET bbs = 'aaabbb\'nn\\ss' WHERE userid = 'hogehoge'
ちなみに
bbsには aaabb'nn\ss=NNNN と入力 userid は hogehoge
0064nobodyさん
2006/01/09(月) 03:16:29ID:???プログラムの頭っから$bbsの内容を確認してみるんだな。
0065nobodyさん
2006/01/09(月) 06:22:22ID:???ここからHOGEの値をとりたいと考えたとき
どんな方法があるでしょうか?
preg_match_all("/HOGE=[0-9]/", $var, $result);
も考えましたが、
これだと$result[0]="HOGE=1", $result[1]="HOGE=6"と
という形になってしまい、「HOGE=」の部分が邪魔です。
str_replaceで削除することもできますが、
もっとスマートな関数や方法はないでしょうか?
0066nobodyさん
2006/01/09(月) 06:41:58ID:???/HOGE=([0-9])/
0067nobodyさん
2006/01/09(月) 10:36:21ID:s2jFLZvLおながいします。
いわゆるオーダーフォーム。商品注文ページ等々。
回覧者から見て、
[order.php]
フォーム記入→Submit
-記入内容にエラー有なら、エラーメッセージとともに[order.php]を再度表示。
つまり、エラーは別ページで見せた結果手動で[order.php]に戻らせるんじゃなく、[order.php]でエラーを表示しつつ、その場で修正できて、そのまま再度Submitさせると。
-記入内容にエラー無なら[payment.php]へ。
ただし[payment.php]のコンテンツ中で、注文内容をフルで活用するので、FORMはそのまま渡したい。
ただし注文内容の長さ/セキュリティ等をふまえて、アドレスには組み込みたくない。つまりPOSTで渡したい。
エラー処理のために、[order.php]のフォームは
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
構成としては、
006867
2006/01/09(月) 10:37:04ID:s2jFLZvL// 一回目の表示なのか、Submitされた後かの判断
if (array_key_exists('_submit_check',$_POST)) {
// Submit以降であると判断
// エラー有り。同ページをエラーとともに表示
if (errorFound()) {
show_form_with_error();
} else {
// エラー無し。[payment.php]へ進ませる
process();
}
} else {
// 一回目の表示なのでエラーメッセージは無し
show_form();
}
+++++++++++++++++++++++++++++++
006967
2006/01/09(月) 10:38:48ID:s2jFLZvLmail(..........)
header(..........)
と続けりゃいいんだけど、ここでいう[payment.php]のように、先ページにフォーム内容をさらに渡したいといった場合、process()の内容をどうすればいいのか。
つまり、ユーザーアクションに頼らず、コード内で手動で、「このフォーム内容で[payment.php]にSubmit」というのは出来るんでしょうか?
構成の再考等も含め、ご指摘お願いします。
繰り返しですが、譲れない点として、
-エラーは、ポップアップその他ではなく、[order.php]内で表示。つまり、エラー表示、修正、再Submitが同じページで出来るようにする
-アドレス上にはフォーム内容を表示したくない。
-encryptもいいけど、やぱりできれば表示させたくない
0070nobodyさん
2006/01/09(月) 11:01:52ID:???0071nobodyさん
2006/01/09(月) 11:12:04ID:???セッション使えば各ページ間でユーザから見えないようにデータを共有できるっていうのもあるし、もしくはprocess()ってやつでpayment.phpをincludeみたいにしちゃえばその必要もないかな。
まあとりあえずここ読んでみ。
http://www.php.net/session
その手の構成(フォームが複数ページにわたる)はセッションを使うのがお決まりではある。
007267
2006/01/09(月) 11:42:29ID:s2jFLZvLてかトライ後早速一個目ででつまずいてることに気づきました...。
ついでといっちゃーなんですが、さくっとわかるようだったらお願いします。
<form method="post" action="<?php echo $_SERVER['PHP_SELF'].'?id='.$id; ?>">
これでSubmitさせてるのに、再読み込み先がおかしい。
order.php?id=2
にこれがあるとして、Submit後、正しくorder.php?id=2とアドレスに表示されてるのに、コンテンツ上では?id=2が無視されてる。
これは$_SERVER['PHP_SELF']の仕様ですか?ARGとか使わないといけないのか。
調べてますが、もしさくっとわかるようだったらお願いします。
0074nobodyさん
2006/01/09(月) 12:01:02ID:???php.iniのmbstringセクションにある
「Local Value」と
「Master Value」の
2つの項目の違いってなんでしょうか?
php.iniを編集すると「Master Value」は反映されるのですが、
「Local Value」は変更されないので困ってます。。
007567
2006/01/09(月) 12:12:29ID:s2jFLZvLそのFORM内に
<input type="hidden" name="id" value="<?=$id?>">
入れとかなきゃ、二回目以降は空になりますわそりゃ。凡ミスでした。
ありがとうございました。
0076nobodyさん
2006/01/09(月) 12:32:30ID:???0077nobodyさん
2006/01/09(月) 13:17:13ID:???たとえそうでも廃止にはなりません
0079nobodyさん
2006/01/09(月) 18:02:15ID:???0080nobodyさん
2006/01/09(月) 18:03:11ID:???0081nobodyさん
2006/01/09(月) 18:19:36ID:???Masterはphp.iniで設定されてる共通設定。
Localは.htaccessで設定されてるディレクトリごとの設定。
0082nobodyさん
2006/01/09(月) 19:46:23ID:???off にしないと XML 系を直接扱う時に記述が面倒くさいし
ロジックと表示が分離しきれないから <?= ?> も使わないし。
0083nobodyさん
2006/01/09(月) 20:38:26ID:???short tag open=PHPの標準テンプレート機能ONの意味で考えてたから
特に気にせずONで使ってる。
0084nobodyさん
2006/01/09(月) 20:43:45ID:???これがPHPクオリティー
0085nobodyさん
2006/01/09(月) 20:45:50ID:???0086nobodyさん
2006/01/09(月) 20:53:40ID:???0087nobodyさん
2006/01/09(月) 20:59:26ID:???0088nobodyさん
2006/01/09(月) 21:07:17ID:???ASPタグは廃止されるがshort tagは廃止されないと言われてるけど
http://www.corephp.co.uk/archives/19-Prepare-for-PHP-6.html
> Farewell <%
> They will remove support for the ASP style tags, but the PHP short-code tag will remain (<?) - so to those on php general who reckon the short-tag is 'depreceated' - hah! ;-)
0090nobodyさん
2006/01/09(月) 21:28:56ID:???(PHP6では)ASPスタイルのタグはサポートされないよ。でもPHPのshort tag(<?)はそのままさ。
なのでphp-generalでshort tagは「非推奨」とか言ってた人・・・( ̄ー ̄)ニヤリッ
0091nobodyさん
2006/01/09(月) 22:11:23ID:???少なからず関係あるんじゃないのかとか思ってみたりする。
0092nobodyさん
2006/01/09(月) 22:51:41ID:???>再配布可能なコードでは、短縮型のタグを使用しないようにしてください。
0093nobodyさん
2006/01/09(月) 23:00:13ID:???他と衝突するわけでもないし。
short_open_tagで一緒くたに扱われていることに何となく疑問を感じる。
0094nobodyさん
2006/01/09(月) 23:34:06ID:???そりゃ、世の中PHPだけで動いてるわけじゃないんだから、
特定の環境と衝突する可能性のあるshort tagは標準にはできないだろうし、
再配布を考慮するなら使うべきじゃないだろ。
0095nobodyさん
2006/01/09(月) 23:37:19ID:???0096nobodyさん
2006/01/10(火) 00:17:24ID:???何が便利なの?
0097nobodyさん
2006/01/10(火) 00:55:56ID:???パスワード解析してくださいませんか?
0098nobodyさん
2006/01/10(火) 01:45:50ID:???一発でできますか? 一つずつ判定してやっているのですが,
もっと早くできるかなと思いまして。
0099nobodyさん
2006/01/10(火) 01:51:44ID:???条件によるけど、preg_grep()かarray_search()+array_splice()とかかな。
■ このスレッドは過去ログ倉庫に格納されています