【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辺り
0237209
2006/01/14(土) 23:14:04ID:???<?php
$key = "a";//検索文字
$str = "a"b<xml>a";//データ
$str = str_replace($key, "<b>{$key}</b>", $str);
?>
<html><body><?= $str ?></body></html>
例をあげて言うと
これを「a」でも「q」でも「t」でもうまく検索できるようにしたい。です。
0238nobodyさん
2006/01/14(土) 23:28:59ID:???0239nobodyさん
2006/01/14(土) 23:36:47ID:???HTML 特殊文字をエスケープしていない素のデータを入れておいて、
あとで表示する際に特殊文字を変換すればいいのに。
そうすりゃ検索も簡単にできるし、データの加工(或いは編集)も楽。
どうしてもデータを HTML 状態にしなければならないのなら
諦めて >>236 のようにするか、
実体参照のテーブルを作って strtr() で
素のデータにしてから検索。ただしこれは激しくメドイ
0241209
2006/01/14(土) 23:50:18ID:???どうしてもデータを HTML 状態にしなければならないです。
今実行できる環境があるなら
よろしければこれを実行してください。
<?php
$key = "a";//検索文字
$str = "a"b<xml>a";//データ
$str = str_replace($key, "<b>${key}</b>", $str);
?>
<html><body><?= $str ?></body></html>
この$strを、「a」「t」「x」で検索して
うまく表示されるように改造していただけたら幸いです。
0243209
2006/01/15(日) 00:36:26ID:???preg_replaceでおk?
>>242
それどこでつかうのですか?
意味がわかりません。
が
自己解決できそうです。
ありがとうございました。
0244nobodyさん
2006/01/15(日) 00:44:43ID:???が
自己解決できそうです。
ありがとうございました
0245nobodyさん
2006/01/15(日) 01:21:29ID:???0246188
2006/01/15(日) 10:08:01ID:???index.php/aaa/?hoge=webpro (不正リクエスト)
index.php/aaa/bbb/?hoge=webpro (不正リクエスト)
ApacheでAcceptPathInfoをoffにする事で回避出来ました。ありがとうございます。
http://example.com/index.php (正規リクエスト)
http://example.com//index.php (不正リクエスト)
http://example.com///index.php (不正リクエスト)
http://example.com////index.php (不正リクエスト)
この様なリクエストを回避する方法はありますでしょうか?
0247nobodyさん
2006/01/15(日) 10:34:04ID:???0248nobodyさん
2006/01/15(日) 11:46:13ID:???何がなんでも不正ってことにしたいみたいだけど
0249nobodyさん
2006/01/15(日) 12:48:25ID:???0250nobodyさん
2006/01/15(日) 15:50:11ID:???ちゃんとレス読んでるのか?
それは不正なリクエストではなく、仕様に沿った正しい実装だ。
どうしても嫌ならPHPとかで、自分が「正規と思える形に整形する」かエラー吐くなり好きなようにやれ
0251nobodyさん
2006/01/15(日) 15:52:28ID:???index.php/aaa/?hoge=webpro
http://example.com////index.php
0252nobodyさん
2006/01/15(日) 16:16:13ID:???お前もちゃんとレス読めんでググれって
上は PATH_INFO で、?foo=bar&hoge=fuga を/bar/fuga
でも機能させることができる(もちろんそれなりの作り込みが必要)
もの。
下は http://example.com/index.php と同じ
どうしてもイヤならリンクを絶対URIで書いて誘導していけば?
ただし、アクセスそのものを拒否しようとしちゃダメ
0253nobodyさん
2006/01/15(日) 16:51:52ID:???回避しようとする意図が分からん。
//の/変換はユーザの利便のために用意されてるものじゃないのか?
Webの仕様が気に入らないならいっそWebサーバーから自作しちまえば?
0254nobodyさん
2006/01/15(日) 16:53:24ID:???FreeBSD 5.4
Apache 1.3.34
PHP5.1.1
Zend Optimizer2.5.10
動かしているもの : pukiwikiのみ
【質問】
アクセス数が多くなると、/usr/ports/lang/php5/work/php-5.1.1/Zend/配下で
・zend_API.c(712) : Actual location (location was relayed)
・zend_hash.c(169) : Actual location (location was relayed)
・zend_vm_execute.h(17469) : Freeing 0x08240824 (44 bytes), script =
といったエラーが大量発生します。
何か原因に心当たりがある方がいらっしゃいましたら、教えて頂けないでしょうか。
書籍を買ったりgoogle検索したりして情報を集めて勉強しているのですが、
手詰まりになっています・・・。
0256nobodyさん
2006/01/15(日) 17:13:28ID:???よー分からんけどPHP5.1.1とZendOptimizer2.5.10の組み合わせによるものか
単なるバグの類じゃないの?
そんな環境の情報はまだ全然少ないからネットで情報漁っても無駄じゃないかと思う。
php-dev辺りのMLで聞いてみるか、Zendにバグ報告出してみるとかした方がいいんじゃないかな。
0258188
2006/01/15(日) 17:21:06ID:???index.php/aaa/?hoge=webpro (意図しないリクエスト)
index.php/aaa/bbb/?hoge=webpro (意図しないリクエスト)
http://example.com/index.php (正規リクエスト)
http://example.com//index.php (意図しないリクエスト)
http://example.com///index.php (意図しないリクエスト)
http://example.com////index.php (意図しないリクエスト)
すべて鯖側のmod_rewriteで両方とも301でリダイレクトする事で回避しました。
表記上不正リクエストと書きましたが意味合い的には私が意図しないリクエストと言う事です。
皆様がおっしゃるとおり仕様に沿った正しいリクエストであると思います。
Permalinkとして複数のURLが存在するのがいやだったのとGoogle先生が意図しないURLでクローリングを始めたので
キャッシュされる前にPermalinkとしての単一URLを意図したかったのです。
長文になりましたが皆様ありがとうございました。お蔭様で解決する事ができました。
0259nobodyさん
2006/01/15(日) 18:21:05ID:???http://wiki.2chx.net/php/
PHPpedia (PHP FAQ集積所) 完成しました。
多少動作が重いかと思いますが、無広告ですのでご了承下さい。
まだ過去ログのFAQ漁っていません。
スレッドでの質問のループを減らすために、ご活用くださいませ。
0260nobodyさん
2006/01/15(日) 18:53:17ID:???>Permalinkとして複数のURLが存在するのがいやだったのとGoogle先生が意図しないURLでクローリングを始めたので
>キャッシュされる前にPermalinkとしての単一URLを意図したかったのです。
おいおい・・そういう何がしたいかって情報は一番初めに書くべきで・・・(ry
0261nobodyさん
2006/01/15(日) 19:18:02ID:???乙!
一応言っておくけど、FAQのQ01がちょっと間違ってるよ。
正しくは、
"$hoge[0]" // OK
"$hoge[a]" // OK
"$hoge['a']" // パースエラー
"$hoge[$x]" // OK
"$hoge->a" // OK
"$hoge->$x" // パースエラー
"$hoge[0][1]" // $hoge[0]のみ評価され、[1]の部分はそのまま残る
"$hoge[a][b]" // $hoge['a']のみ評価され、[b]の部分はそのまま残る
"$hoge->a->b" // $hoge->aのみ評価され、->bの部分はそのまま残る
一番下の3つのような状況で正しく解釈させるために中括弧 { } を使う。
ただし、中括弧でくくった場合は"{$hoge[a][b]}"はaとbが定数とみなされるので、"{$hoge['a']['b']}"と書く必要がある。
0262nobodyさん
2006/01/15(日) 19:42:09ID:???ありがとうございます。
メモリ関係を再チェックして、違うようならMLやZendに報告することにします。
0263nobodyさん
2006/01/15(日) 20:21:36ID:???http://wiki.2chx.net/php/
0265nobodyさん
2006/01/16(月) 01:39:15ID:/VwxqsS4mysql_queryで時間のかかるクエリを実行させているのですが、
20秒経ってもFatalErrorが出てこないんです。。
set_time_limit等も使用していないのですが、どうすれば処理が中断できるでしょうか?
0266nobodyさん
2006/01/16(月) 01:40:03ID:/VwxqsS4使用してるのは
FreeBSD 4.10
Apache 1.3.34
PHP 4.3.11(DSO)
です。
0267nobodyさん
2006/01/16(月) 01:44:12ID:???http://www.php.net/manual/ja/function.set-time-limit.php
>注意: 関数set_time_limit()と設定ディレクティブmax_execution_timeは、
>このスクリプト自体の実行時間にのみ影響を与えます。
>system(), sleep()関数、デー タベースクエリ等のシステムコールのような
>スクリプト実行以外で発生する処理にかかった時間は
>スクリプトが実行される最大時間を定義する際には含まれません。
0268265
2006/01/16(月) 01:50:35ID:???データベースは影響されないんですね。。
ではどのようにして中断処理を実行させるべきなのでしょうか?
PHPでは無理でしょうか?
0269nobodyさん
2006/01/16(月) 02:24:40ID:???0270nobodyさん
2006/01/16(月) 02:32:42ID:???http://www.php.net/manual/ja/ref.mysql.php
mysql.connect_timeoutかな?
0271265
2006/01/16(月) 02:40:39ID:???でやってみたのですが、やはり20秒以上かかっても処理は中断されませんでした。。
0272nobodyさん
2006/01/16(月) 02:45:49ID:???ここの「文字化けしている本文の修復 」ってphp
でどうやればよろしいでしょうか?
0273nobodyさん
2006/01/16(月) 02:58:45ID:???mysql.connect_time は PHP が MySQL に接続を確立させるまでの時間制限。
確立した後は関係無いぞ。
0274265
2006/01/16(月) 03:11:57ID:???他に処理中断をする部分も見つかりませんし。。
0276nobodyさん
2006/01/16(月) 04:34:58ID:???ロジックの考え方的におかしくないか?
0277nobodyさん
2006/01/16(月) 05:10:50ID:???包み隠さず書けば誰かが相談に乗るかもしれない
0278nobodyさん
2006/01/16(月) 05:12:38ID:???その辺の事情も書けば、アドバイス貰えるかも知れないのに残念だ。
0281265
2006/01/16(月) 12:39:11ID:/VwxqsS4ごくまれに20秒以上かかる検索結果もあるんです。
なので、20秒を限界としたいのですが、、
0282nobodyさん
2006/01/16(月) 12:43:59ID:???max_execution_timeで無理となるとphp側でできることは無いと思うし、
DB側でも「時間であきらめる」という項目は無かったと思う。
(そんなことされたら困る)
20秒以上かからんようにDBをチューンするしかないんじゃね?
0283nobodyさん
2006/01/16(月) 13:10:59ID:???せめて3(最悪5)秒以内で結果が出るようにした方がいいよ
0284nobodyさん
2006/01/16(月) 15:20:53ID:???0285nobodyさん
2006/01/16(月) 15:29:27ID:???0286nobodyさん
2006/01/16(月) 15:36:34ID:???PHPで組み込み型のアクセス制限スクリプトをご存知の方はいらっしゃいますでしょうか?
CGIではこの2つを知っているのですが、PHPでは探したのですが見つかりませんでした。
ttp://cgiroom.nu/list/level_up/acheck/index.htm
ttp://dream.lib.net/room/cgi/e_acsdeny.html
0289nobodyさん
2006/01/16(月) 19:25:47ID:???>DB側でも「時間であきらめる」という項目は無かったと思う。
これはあるよ。ただ基本的に無限ループに近い処理をしてしまった時の
防衛策のようなものだけど。そのトランザクションを無効(巻き戻し)してエラーを返す。
0290nobodyさん
2006/01/16(月) 19:35:53ID:???0291nobodyさん
2006/01/16(月) 19:45:09ID:???0293nobodyさん
2006/01/16(月) 22:04:35ID:???0294nobodyさん
2006/01/17(火) 03:48:33ID:???0295nobodyさん
2006/01/17(火) 04:30:49ID:+lwEE0tn最新のn件抽出するスクリプトをPHPで書いて、トップページに表示させろ。
blogみたいに〜って言うならRSSでも生成してトップで取り込んでも良いだろうけど。
少々下がり気味なんでageとこ
0296nobodyさん
2006/01/17(火) 04:32:00ID:???それを考えるのがお前の仕事。
というか自分で答え書いてるんだけど何を知りたいの?
記事がファイルに保存してあってそこからの抽出方法?
それともDBからの取得方法?
どっちにしろその質問の仕方じゃ答えはでないとおもうが。
0297nobodyさん
2006/01/17(火) 05:15:18ID:???1. 日記データの日付を取得する
2. 取得した日付情報を最近のものの順序で並び替え
3. 並び替えたものの上位n件を取得
4. 取得できた最新のn件の日記リストをトップページに表示
アクティブな方法
1. 日記データを新規追加する際に"最新日記リスト"に記録。
2. "最新日記リスト"は最新のn件のリストとなるように新旧の項目を調整
3. "最新日記リスト"をトップページに表示
処理コストが大きいので通常は後者の方法を取る。
0298nobodyさん
2006/01/17(火) 07:35:06ID:???"SELECT * FROM table ORDER BY logtime DESC LIMIT $n;"
0299nobodyさん
2006/01/17(火) 12:36:14ID:kDHNpOTyfile('http://...')やfopen('http://...')
を記述してるとapache2がエラー起こして死亡してしまうんだ。
php.iniのallow_url_fopen=On
になってるから、動いてしかるべきなんだけどな。
>>164で言ってたfsockを使うとちゃんとデーター取れるんだけど、
今回の変更ってここら辺影響してるんだっけ?
0301299
2006/01/17(火) 14:13:03ID:???ワトソン博士が立ち上がってApacheのサービスが落ちて再起動してるっぽい。
phpのコマンドラインで実行しても同じ症状になってる。
php -lでスクリプト自体をチェックしてもエラーメッセージ無しといった状況だったり。
OSはwindows2k sp4だけど、不具合とはかんけー無いだろうなぁ・・・。
0302nobodyさん
2006/01/17(火) 14:32:28ID:???0303nobodyさん
2006/01/17(火) 14:58:28ID:???CLIとCGIとで試してみたけど、
確かにPHP4.4.2(cgi-fcgi)で落ちるね。
単純に$fp = fopen('http://www.php.net/','r');だけで。
NG:4.4.2(cgi-fcgi)
OK:4.4.1(cli/cgi-fcgi),4.4.2(cli)
OK:5.1.1(cli/cgi-fcgi),5.1.2(cli/cgi-fcgi)
各種サーバモジュールは試してない。
原因は白根。
0304nobodyさん
2006/01/17(火) 15:23:12ID:???0305nobodyさん
2006/01/17(火) 15:26:13ID:???Fixed bug #34359 (Possible crash inside fopen http wrapper).
0306nobodyさん
2006/01/17(火) 15:40:38ID:???0307nobodyさん
2006/01/17(火) 15:45:24ID:???いつまで経ってもダメ
0308nobodyさん
2006/01/17(火) 18:29:55ID:???コード書けなくてもバグ報告ぐらい出来るだろ。
0309nobodyさん
2006/01/17(火) 21:31:45ID:???0310294
2006/01/17(火) 22:52:18ID:???DBは使いません。
保存してあるファイルからの抽出です。
自分がやりたいのは
diary.htmlと言うファイルがあって、そこの中の
<h4>日記タイトル</h4>
<p>本文</p>
だけを抜き出してindex.htmlの特定の場所に1件表示させたいんです。
0312nobodyさん
2006/01/17(火) 23:03:17ID:???フォーマットが決まってるなら、preg_matchで検索するか
XMLとしてパースするか、自分でオートマトン組んで処理するか。
ただ、>297をみて後者を選ぶのがベター
前者にするならキャッシュ持たせた方がいい。
0313294
2006/01/17(火) 23:06:55ID:???>>312
ありがとうございました。
ド素人なので実際の組み方は分かりませんが、イメージは大体掴めました。
一から勉強します…。
0314nobodyさん
2006/01/18(水) 01:07:48ID:zQtemvMy本日バグレポートを出したら、PHP4.4.3-dev
http://snaps.php.net/win32/php4-win32-STABLE-latest.zip
で解決しているという回等を頂きました。
インストール確認(Windows)したところ、SAPI, CGI共に
require, file, fopen でのHTTPプロトコル接続に成功しました。
mb_send_mail のheader問題も4.4.2同様大丈夫のようです。
0315314
2006/01/18(水) 01:14:07ID:zQtemvMy私は4.4.3正式版が出るまで、WindowsではPHP4.3.11を
使用することにしようと思います。
($GLOBALの問題を考慮しても最近のPHPのバグを考えると…)
皆様はWinでの4.4.3-dev 4.3.11の選択をどの様にお考えになられますか?
0316299
2006/01/18(水) 11:52:19ID:???4.4.3-devで不具合は改善できてますね・・・。
>>315
完全なfixを期待できないからdevを使うのであって、
古いから安心ってわけでもないだろうしなぁ・・・
現実問題として、かたっぽが直っても別の部分で問題が出たりするから
品質管理が出来てるほうを選ぶ。
0317nobodyさん
2006/01/18(水) 12:06:06ID:???辺りが、とても寂しかったりするんだけどね。
0318nobodyさん
2006/01/18(水) 12:08:47ID:???0319nobodyさん
2006/01/18(水) 12:15:54ID:???変数(ID/PASS)を渡したいんですが、良い方法はあるでしょうか?
GETを使うのはセキュリティ的にも論外な気がします。
ユーザ側からPASSは確認できないようにしていますので
ブラウザからソースを見るとPASSが確認できてしまうPOSTも避けたいです。
そうなるとセッション()を使うところかと思うのですが、
Bプログラム側でセッションを考慮しようとすると非常に面倒な部分が
あるのです。
何か他に良い方法はないでしょうか?
0320nobodyさん
2006/01/18(水) 12:30:03ID:???0322nobodyさん
2006/01/18(水) 12:40:20ID:???BのID/PASS受け取り部分って自由にいじれるの?
だったらファイル経由とかDB経由とかにしてそのキーだけGETで渡すとか。
0323nobodyさん
2006/01/18(水) 13:54:08ID:???「全く別のBというプログラム(他人作成)」が現状でどのようなI/Fを持っていて
それを使う必要があるのか、または自分でI/Fをついかできるのか
AとBがネットワーク及びサーバでの位置関係がどうなってるのか、どのようにできるのか
その辺の情報がないと、手段が絞れないよ。
0324nobodyさん
2006/01/18(水) 14:01:34ID:???これだな。
http://bugs.php.net/bug.php?id=36054
snapshotsの確認はすっかり忘れてたよ。
4.4は暫くdev使おう。
0325nobodyさん
2006/01/18(水) 20:38:06ID:???0326nobodyさん
2006/01/18(水) 22:55:31ID:???なんだ、その致命的なバグは。
それって正式リリース版のみのバグ?
4.4.2のdev使ってるんだが発生しないような・・・
0328nobodyさん
2006/01/19(木) 01:00:00ID:???0329326
2006/01/19(木) 01:03:27ID:???fedora4+apache1.3環境で試してるけど、
apache2かwindowsあたりの問題かな?
0330nobodyさん
2006/01/19(木) 01:16:54ID:???serializeしてファイルやDBにとっておくってのもあるね。
あと環境依存だった気がするけどshmopとか。
0331nobodyさん
2006/01/19(木) 01:32:57ID:???これって結局apache側の処理(mimeだっけ?)であってphpでどうにかすることはできないの
でしょうか?
0333nobodyさん
2006/01/19(木) 02:51:51ID:???>>314で気付け。って感じだが、これはWin32版PHP4.4.2のバグ。
http://pc8.2ch.net/test/read.cgi/php/1137236771/182
の方にさらに細かい検証報告があるよ。
0334nobodyさん
2006/01/19(木) 02:54:07ID:???リンク先でheader()使ってContent-typeにoctet-streamを吐いてやればいいんじゃないかと。
0335nobodyさん
2006/01/19(木) 03:43:30ID:???いや、Content-typeはimage/pngやimage/jpeg等で、Content-dispositionをattachmentにするのがよいのではないかと。
以下、かなりテキトーだけど雰囲気だけ。
リンク元:
<a href="download.php?src=hoge.png"><img src="hoge.png" etc. /></a>
リンク先(download.php):
<?php
$src = $_GET["src"];
header("Content-type: " . image_type_to_mime_type(exif_imagetype($src)));
header("Content-disposition: attachment; filename=$src");
header("Content-length: " . filesize($src));
readfile($src);
?>
あとそれに加えてLast-modifiedやETagも送出し、リクエストヘッダからはIf-modified-sinceやIf-none-matchを読んで必要に応じて304 Not Modifiedを返す、とかするとより親切。
■ このスレッドは過去ログ倉庫に格納されています