【PHP】下らねぇ質問はID出して書き込みやがれ 103
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/01/25(火) 20:46:58ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 102
http://hibari.2ch.net/test/read.cgi/php/1292670453/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ 出来るだけスレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・IDを出さない場合、偽者や成りすましの出現を覚悟すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に極力IDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0724nobodyさん
2011/02/09(水) 11:45:18ID:???0725nobodyさん
2011/02/09(水) 11:52:02ID:???0726nobodyさん
2011/02/09(水) 12:02:16ID:???0727nobodyさん
2011/02/09(水) 12:17:03ID:???0728nobodyさん
2011/02/09(水) 12:28:34ID:gKogpxd1けれども会社の標準から外れていると言われ不採用になりました。
どうしてもPHPで開発したいんです。
どうすれば良いですか?
0729nobodyさん
2011/02/09(水) 12:30:07ID:???0730nobodyさん
2011/02/09(水) 12:35:47ID:???プログラマしか調達できなくてしょうがない以外に選ぶ理由ないと
思うけどなw
0731nobodyさん
2011/02/09(水) 12:38:41ID:???0732nobodyさん
2011/02/09(水) 12:39:08ID:???0733716
2011/02/09(水) 12:59:48ID:NvsGmr7wありがとうございます
はい、再読み込みなく書き込みたいということです
セッションファイルをロックしてしまうから、session_write_close() で解放しないともう一つのスクリプトが session_start() で止まってしまうんです
0734nobodyさん
2011/02/09(水) 13:51:11ID:???ロックしてしまうって、ページの表示処理が終われば勝手にcloseするんだから、
session_write_close()は、その解放待ちをなるべく早く終わらせたいって時に使うものですよ。
たぶん勘違いしてる。
0735nobodyさん
2011/02/09(水) 14:22:26ID:???0736nobodyさん
2011/02/09(水) 15:06:13ID:i4dE8PNb.htaccess内で
AddHandler application/x-httpd-phpcgi .php
と記述しPHPをCGIモードで動かしていますが
この記述があると
php_value auto_prepend_file がうまく効きません。
AddHandlerの記述をコメントアウトすると効きます。
CGIモードだと効かないのかと思い検索したのですが
それっぽい記述はありませんでした。
CGIモードで、php_value auto_prepend_fileを効かせる方法があればご教授ください。
0737nobodyさん
2011/02/09(水) 15:46:08ID:???むしろ.htaccessとhttpd.confに設定を書けるのがapacheモジュールと
して実行している場合の例外なのです。
5.3.0以降でサポートされた.user.iniファイルを使うか、読み込む
php.iniファイルを別に用意してPHPRC環境変数で指定する、あたり
かな。
0738nobodyさん
2011/02/09(水) 16:12:29ID:i4dE8PNbありがとうございます。
PHPのバージョンは確認した所5.2.5でした。
CORESERVERでPHPRC環境変数を指定する方法がわからないので
少し調べてみます。
0739nobodyさん
2011/02/09(水) 17:34:43ID:i4dE8PNbphp.iniで設定する事ができました。
ただ、php.iniの適用範囲はphp.iniが置かれたディレクトリのみのようで
これは、全ての下位ディレクトリにもphp.iniをアップロードする必要があるということでしょうか?
なにか1つでも設定が変わった場合に、全てのファイルを書き換えるのは面倒だと思いますが
一般的なサイトでもこういった運用なのでしょうか?
0740nobodyさん
2011/02/09(水) 18:08:50ID:???>>737が書いてるようにPHPRCでphp.iniを指定すればいいんじゃないの?
試してないけど.htaccessにこれでどう?
SetEnv PHPRC /dir/php.ini
0741nobodyさん
2011/02/09(水) 18:09:06ID:???多分面倒だから.user.iniという仕組みが追加されたんだと思う。
でも.htaccessでPHPRCをSetEnvすれば下位ディレクトリでも
効いたような?
0742nobodyさん
2011/02/09(水) 18:12:02ID:???0745nobodyさん
2011/02/09(水) 21:05:15ID:YG/3/1p4> 理由無くjsをheadで定義するサイトなんてごまんとあるしね
jsを<head>内に書くのと<body>内に書く違いを教えてほしい
さんざんぐぐって結局明示的なこと書いてるサイト見つけられなかった
0748745
2011/02/09(水) 22:00:14ID:YG/3/1p4なるほど、わかった
スレチすまんかった
0749nobodyさん
2011/02/09(水) 22:07:17ID:???>>745
理由はjsの<script src=によるロードはページのブロッキングがおきるから
だから例外を除き最後に書くのが今の常識
詳しくはjavascript load blockingでググるといい
0750716
2011/02/09(水) 22:18:28ID:NvsGmr7wCometのため、受信用スクリプトを1回のリクエストで掴んだまま、送信用スクリプトをそれとは別に動かそうとしています
他に方法がないようですので、@演算子で妥協することにします
ありがとうございました
0751716
2011/02/09(水) 22:27:49ID:NvsGmr7wすみません読み逃していました
受信用スクリプトで session_start() を 2 ヶ所記述しており
1 ヶ所目が flush() より前にあって、2 ヶ所目がコネクションを掴んだままにするための while 文の中にあります
session_start() によるヘッダー送信を予め抑制する記述方法はなさそうなので、2 ヶ所目に @ 演算子をつけて使うことにします
失礼致しました
0752nobodyさん
2011/02/09(水) 22:28:18ID:???0753nobodyさん
2011/02/09(水) 22:53:19ID:???0754nobodyさん
2011/02/09(水) 23:34:18ID:GiERfPitこれってどういう意味の警告ですか?
読み込んだ文字列をHTMLとしてパースするときにIDの重複箇所があるって意味かと思ったのですが
文字列内にはFOOは一箇所しかありません
<?php
$doc = new DOMDocument();
$doc->loadHTML('<html><body><p id="FOO">FOO</p><p id="FOO">FOO</p></body></html>');
echo $doc->saveHTML();
?>
とIDが重複した簡単な文字列で試してみてもこの警告は出ませんでした
loadHTML()に渡した文字列のIDのことではないのですか?
この警告を消すにはどうすればいいですか
0755nobodyさん
2011/02/09(水) 23:38:03ID:???0756nobodyさん
2011/02/09(水) 23:42:12ID:???0757nobodyさん
2011/02/09(水) 23:44:27ID:???0758716
2011/02/09(水) 23:50:40ID:NvsGmr7wPHPでcometを実現するのはタブーということでしょうか
>>753
セッションファイルへの書き込みのために必要です
改めて見直すと、flush() 後にセッションファイルへの書き込みが必要なキーは、送信用スクリプトでは使わないキーで
そのキーだけ別のセッション名にすることで解決しました
本当に申し訳御座いません
0759nobodyさん
2011/02/09(水) 23:54:11ID:???0761nobodyさん
2011/02/10(木) 04:49:58ID:KBWpaGBGどうすればよいでしょうか? この場合、東京、大阪、京都の順に変えたいです。
Array
(
[0] => Array
(
[number] => 145
[coupon_area] => 大阪
)
[1] => Array
(
[number] => 25
[coupon_area] => 京都
)
[1] => Array
(
[number] => 161
[coupon_area] => 東京
)
)
ksort, usortなどたくさんありますが、どれが適切なのかちょっと混乱してしまい、
質問させてもらいました。
0762nobodyさん
2011/02/10(木) 06:59:19ID:???$ar = Array(
Array("number" => 145, "coupon_area" => "大阪"),
Array("number" => 25, "coupon_area" => "京都"),
Array("number" => 161, "coupon_area" => "東京")
);
var_dump($ar);
$amounts = array();
foreach ($ar as $v) $number[] = $v['number'];
array_multisort($number, SORT_DESC, SORT_NUMERIC, $ar);
var_dump($ar);
0763nobodyさん
2011/02/10(木) 07:00:21ID:???○$number = array();
0764nobodyさん
2011/02/10(木) 07:40:45ID:???0765nobodyさん
2011/02/10(木) 09:20:14ID:???usort($ar,function($a,$b){return $a["number"] > $b["number"] ? -1 : ($a["number"] == $b["number"] ? 0 : 1);});
0766nobodyさん
2011/02/10(木) 12:49:25ID:???phpのメリットってなんですか?
0767nobodyさん
2011/02/10(木) 12:57:00ID:KBWpaGBGありがとうございます。プログラムを参考にググったりして、
こんな感じに落ち着きました。 しかし、usortは難しくてまだちゃんと理解できてない。。
$sales = Array(
Array("number" => 145, "coupon_area" => "大阪"),
Array("number" => 25, "coupon_area" => "京都"),
Array("number" => 161, "coupon_area" => "東京")
);
pr($sales);
usort($sales, create_function('$a,$b',
'return($b[\'number\'] - $a[\'number\']);'));
pr($sales);
0768nobodyさん
2011/02/10(木) 13:42:57ID:???return文の中身は>>765よりそっちのがスマートだな。
create_function使わなくても無名関数でも十分だとは思うが。
0769nobodyさん
2011/02/10(木) 14:29:34ID:???0770nobodyさん
2011/02/10(木) 14:33:20ID:???0771nobodyさん
2011/02/10(木) 14:37:52ID:???0772nobodyさん
2011/02/10(木) 14:49:37ID:???!ninja
冒険の書(Lv=2,xxxP)
0773nobodyさん
2011/02/10(木) 14:51:25ID:???あれって、任意の(目的地の)URLと一対のユニークの6文字のパラメータをつけてるわけですが、
どうやってその6文字を生成するんでしょうか?
単純に思いつくのが
・DBにテーブル作成。カラムは url/パラメータ (最低限)
・乱数生成
・テーブル中にこの乱数を検索
・なければ発行&登録
って感じですが、数十万件のログが出来た時、こんな処理だと負荷が心配です。
もっと効率的なやり方があるんでしょうか?
クエリキャッシュ使うとかえって危険そうだし…
PHPの質問なのかDBの質問なのかどっち付かずですが、お願いします
乱数のパターン(1文字目が何かとか)でテーブルを使い分ければ良いのかな?
どういうやり方が正解なのかなぁ…
0774nobodyさん
2011/02/10(木) 14:52:18ID:B6xb9mKa0775nobodyさん
2011/02/10(木) 14:56:54ID:???何のためのDBっすか。 一文字目が〜みたいなのやってくれますから。
あと、ランダムに見えてもランダムじゃないことも。
タダの63進数とか。
0776nobodyさん
2011/02/10(木) 14:59:03ID:ZYoX/YHSレム暗号って言うらしいんだけどこれの仕組みを教えて
0777773
2011/02/10(木) 15:13:00ID:B6xb9mKa>一文字目が〜みたいなのやってくれますから。
これって検索時の条件づけ(where)のことですよね?
検索対象がふくれあがった時に負荷が心配ってことの解決にはならなくないですか?
エンドユーザが短縮URLをクリックした時に全行検索するのはしょうがないとしても、
乱数生成時の、「作った乱数が既存のものと重複しない確認」の部分の負荷を減らしたいと
思ってるんです
773に書いたようなあんな単純な処理のわけないと思うんですが、どうなのかな
0779nobodyさん
2011/02/10(木) 15:34:39ID:???63進数とか見覚えあるんだけど。
0780nobodyさん
2011/02/10(木) 15:49:42ID:???http://unkar.org/r/php/1289793607/282-320
0781773
2011/02/10(木) 15:57:10ID:B6xb9mKa>>778
インデックスはこの場合paramに貼るんですよね?
(テーブルのカラムがurl/paramだとして)
すみません、今までテーブルでのindexの扱いってID(オートインクリメントの)でしか
やったことないのでよくわからないのですが、
たった2つしかないカラムの片方にindex貼ることでそんなに高速化できるんでしょうか?
(Mysqlの知識不足すぎですね、すみません)
とりあえず780さんのリンク先見てみます
0782nobodyさん
2011/02/10(木) 16:12:05ID:???paramは当然INDEX付けないと、めっちゃ遅くなるぞ。
数千レコードくらいになると違いが目に見えてわかると思う。
簡単にテストできるから試してみればいい。
IDは普通PRIMARY KEYにするよね。まぁ一緒だけど。
http://dev.mysql.com/doc/refman/5.1/ja/mysql-indexes.html
0783nobodyさん
2011/02/10(木) 16:13:41ID:???普通ぐらいにはなる。indexは高速化において物凄く重要
0784nobodyさん
2011/02/10(木) 16:17:45ID:???0785773
2011/02/10(木) 16:23:12ID:???勉強なりました!
0787nobodyさん
2011/02/10(木) 18:09:22ID:5MLxQrOQこのページにあるURL表示機能を、特定のフレーム(またはインラインフレーム)に対して実行させたいのですが、どうすればいいでしょうか?
両フレームが同一ドメインであればJavascriptでできるのですが、片方が他ドメインのサイトだと、
クロスドメイン制約に引っかかって動かないので、phpを使おうと考えました。
0788773
2011/02/10(木) 18:41:14ID:???これ見て勉強してみます
ttp://www.webcreativepark.net/labs/tinyurl/
どうもありがとう
0789nobodyさん
2011/02/10(木) 18:55:13ID:???それ見てみたけど、君がやりたいことと全く関係無いじゃん
単に自分のURLの下に数字の連番付けてログに記録してるだけだね
0790nobodyさん
2011/02/10(木) 18:59:01ID:???フレーム使うならクロスドメイン制約とか関係ない。
そもそもメインフレームは自前でアップするんなら、子フレームだって同じドメインにアップできるんじゃない?
つーか、HTMLの話でPHP関係ないから。
0793nobodyさん
2011/02/10(木) 19:04:39ID:???0794787
2011/02/10(木) 19:58:06ID:5MLxQrOQよくある翻訳サイトのように、上フレームが自サイト、下フレームがネットサーフィン中のサイトという形を考えています。
下フレームはプロキシにしない限り、他ドメインとなります(プロキシを作ると転送量の問題や踏み台にされる可能性があるので)。
JavascriptやAjaxは通常クロスドメイン通信が不可能なため、dojoを使ってみたのですがよく分からず、
phpで対応できないかと考えました。
色々と検索はしたのですが、フレームに関する記述がそもそも見付からず、
先に進めない状態です。
0795nobodyさん
2011/02/10(木) 19:59:25ID:???片方のサイトは人様のものなんだよな?
0796nobodyさん
2011/02/10(木) 20:01:29ID:???!ninja
冒険の書(Lv=2,xxxP)
0797787
2011/02/10(木) 20:08:57ID:5MLxQrOQそうです。
0798nobodyさん
2011/02/10(木) 20:09:45ID:???いやだからさ、フレーム使うってことは、古典的なのHTMLのframeタグを使うってことでしょ?
さすがにframeタグの使用方法くらいわかってるんだよね?
だったら上フレームから呼び出すページを例のPHPにするだけでしょ?
一体何につまずいてるんだか。
0799nobodyさん
2011/02/10(木) 20:13:11ID:???ネットサーフィン中のサイトのアドレスを表示したいのか。
そりゃ無理だ。
0801nobodyさん
2011/02/10(木) 20:35:52ID:???javascript使ってこんなのは?
test.html
----------
<html>
<head>
</head>
<frameset rows="50,*" onload="top.head.tt()">
<frame src="head.html" name="head">
<frame src="main.html" name="main">
</frameset>
</html>
----------
head.html
----------
<html>
<head>
<script type="text/javascript">
<!--
function tt(){
document.all.url.innerHTML=top.main.location.href;
}
// -->
</script>
</head>
<body>
<div id="url"></div>
</body>
</html>
----------
0802787
2011/02/10(木) 20:46:25ID:5MLxQrOQためしにmain.htmlも作って、test.htmlを表示したら上フレームにパスが表示されましたが、
<frame src="main.html" name="main">を外部サイトに書き換えたら何も出ませんでした。
0803nobodyさん
2011/02/10(木) 20:59:36ID:???そうだね。
下のフレームでネットサーフィンするってことは、URLもころころ変わるの?
そうだとするといずれにしてもリアルタイムでURLを取得するのは難しいかも。
入り口ページを設けて閲覧するサイトを指定するとか、別ページからリンクを張るなら
test.html をPHPで書けばどうにかできるね。
0804nobodyさん
2011/02/10(木) 21:19:40ID:???POST(target指定)→PHPの中で相手サイト取得加工→フレームで表示
これが要求を満たす通常考えられるフロー
同一ドメイン管理下での表示なのでスクリプト埋め込みもアクセスも思いのまま
(今は非同期HTTPクライアントを使った効率的な手法があるけど
色んな技術がからんで説明してもわかりにくいだけなので割愛)
この場合、PHPでやるのは取得とリンクの書き換え(jsによる動的取得系にも対応しないといけない)の二つになる
0806787
2011/02/10(木) 21:34:02ID:5MLxQrOQそうです。
下のフレームにあるサイトは不特定多数です。
>>804
ありがとうございます。
ちなみにその方法は、他ドメインのサイトにあるリンクから別なページに飛んだ場合でも、
正しくURLを取得できるのでしょうか?
0807787
2011/02/10(木) 21:37:56ID:5MLxQrOQプロキシも検討していますが、掲示板書き込み時にはねられることとかも考え、
他の手段がなかったときの最終手段にしようと思います。
先ほど、IEのセキュリティレベルを変えて「ドメイン間でのデータソースのアクセス」を有効にしましたが、
これでもクロスドメイン通信は可能にならず、先ほどのスクリプトは動きませんでした。
0808nobodyさん
2011/02/10(木) 21:42:40ID:???なめてるな
0811nobodyさん
2011/02/10(木) 22:30:24ID:???0812787
2011/02/10(木) 22:33:38ID:5MLxQrOQ表示というか、実際にやりたいことは自動的にフォームに入れて自動送信、です。
こちらのスクリプトはすでに動作確認できています。
ただ、このクロスドメインの問題でつまづいてしまって……
あと、フレームの場合は基本的に子フレームのURLはアドレスバーに載らないはずです
0814nobodyさん
2011/02/11(金) 04:34:05ID:???大抵は10進数以外の表現を使ってるだけで、ただのauto_increment
乱数である必要があればセッションで同じ技術を使ってるのでそっち方面参考にするのが早い
session save_handlerをDBにした時とやること一緒でしょ
>>812
>自動的にフォームに入れて自動送信
ひょっとしてgreasemonkeyとかユーザスクリプトを使ったらすぐ解決する問題?
0816nobodyさん
2011/02/11(金) 09:22:58ID:???0819nobodyさん
2011/02/11(金) 12:31:01ID:???<head>
</head>
<body>
</body>
</html>
どこ?
0820nobodyさん
2011/02/11(金) 12:38:55ID:???0821nobodyさん
2011/02/11(金) 12:43:17ID:???0823nobodyさん
2011/02/11(金) 12:46:11ID:???■ このスレッドは過去ログ倉庫に格納されています