【PHP】下らねぇ質問はID出して書き込みやがれ 124
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2012/11/20(火) 18:02:45.99ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 123
http://kohada.2ch.net/test/read.cgi/php/1348583995/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
0865nobodyさん
2012/12/31(月) 19:21:57.73ID:???0867nobodyさん
2012/12/31(月) 21:21:43.17ID:???0868nobodyさん
2012/12/31(月) 22:48:41.19ID:WNJWSLTrONみたいです。log
HTTP/1.1 404 Not Found
Date: Mon, 31 Dec 2012 13:47:46 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
ってなります。
0869nobodyさん
2012/12/31(月) 22:50:38.14ID:???0870nobodyさん
2012/12/31(月) 23:05:02.37ID:WNJWSLTr0871nobodyさん
2012/12/31(月) 23:57:06.25ID:???0872nobodyさん
2013/01/01(火) 10:14:58.22ID:jqUxa8v50873nobodyさん
2013/01/01(火) 10:26:56.40ID:???レスポンスで404が帰ってるんだから、本当に404なんだろう。
httpdが受け取ってるリクエストが予定通りなのかどうかを
確認した方が早いんじゃないの?
0874nobodyさん
2013/01/01(火) 11:23:29.23ID:???0875nobodyさん
2013/01/01(火) 11:58:45.84ID:???0876nobodyさん
2013/01/01(火) 12:28:36.84ID:jqUxa8v5予定通りなのかどうかの確認がわかりません。
ttp://dl10.getuploader.com/g/1%7Csample/7341/sample_7341.gif
これではないですよね?
0877nobodyさん
2013/01/01(火) 13:31:35.80ID:???リクエスト出してるのが自分の書いたスクリプトなんだろ?
その時にリクエスト内容いったんファイルに書き出してチェックするとかしたら
0878nobodyさん
2013/01/01(火) 13:52:24.52ID:???$fp = fsockopen('127.0.0.1', 80);
これは?
0879nobodyさん
2013/01/01(火) 14:35:18.12ID:???一つ目のパラメータにarray()とかしないで、
外で作って変数に入れとけ。
その方がミスを見つけやすい。
0881nobodyさん
2013/01/01(火) 16:47:37.71ID:???0882nobodyさん
2013/01/01(火) 16:58:58.70ID:???キチガイ乙
0883nobodyさん
2013/01/01(火) 17:00:46.16ID:???端末→A→B
の端末部分の表示に見えるが。
だとしたら意味無いけどw
でももう>>878で解決だと思うのだが。
本人まだ来てないが。
0884nobodyさん
2013/01/01(火) 17:22:57.28ID:jqUxa8v5>>878で解決しました。ありがとうございます&サーセンw
あとデータ送れてなくても200にはなってたので一応報告しときます
0885nobodyさん
2013/01/01(火) 17:23:37.78ID:???0888nobodyさん
2013/01/01(火) 20:47:08.89ID:4XuGAmb/PHPはオブジェクト指向言語の代表格なのでPHPを先に学習すると
JavaとかC#とか超簡単に覚えられるし、これからはPHPの高い信頼性を
生かして他の言語で作られたシステム、特に銀行系のシステムが
PHPに置き換えられていくと会社の先輩から聞きました。
そこでオススメの参考書を教えて下さい。
0889nobodyさん
2013/01/01(火) 20:51:07.05ID:???おっと、無職でしたっけ、失敬。
0890nobodyさん
2013/01/01(火) 20:54:19.05ID:???0892nobodyさん
2013/01/02(水) 05:13:50.35ID:qU6EREs2キャッシュが無い場合は以下を実行して複数レコードのクエリ結果を保存しているのですが、
while($row = mysql_fetch_array($my_Row)){
$menu1_0_title = $row["book_title"];
$menu1_0_no = $row["book_no"];
$menu1_0_chosha = $row["book_chosha"];
if(empty($menu1_0_chosha){
$menu1_0_chosha = "不明";
}
echo "<li><a href=\"./".$menu1_0_no.".html\">".$menu1_0_chosha." - ".$menu1_0_title."▼</a></li>\n";
}
$row = serialize($row);
$memcached->set("bookcache", $row, MEMCACHE_COMPRESSED, time() + 300);
}else{
$row = unserialize($row);
キャッシュが存在する場合、この後の処理はどのように書けば良いのでしょうか?
while(){}の中身がうまく書けずに困っています。
0893nobodyさん
2013/01/02(水) 06:39:18.31ID:???キャッシュから取得して変数に格納
} else {
DBから取得して変数に格納
}
変数を使用する
0894nobodyさん
2013/01/02(水) 06:43:03.45ID:???0895nobodyさん
2013/01/02(水) 07:05:16.50ID:qU6EREs2ありがとうございます。
>>893
まさにその「キャッシュから取得して変数に格納」の記述方法がわからず苦悩しています。
while(『ココ』){
$menu1_0_title = $row["book_title"];
$menu1_0_no = $row["book_no"];
$menu1_0_chosha = $row["book_chosha"];
if(empty($menu1_0_chosha){
$menu1_0_chosha = "不明";
}
echo "<li><a href=\"./".$menu1_0_no.".html\">".$menu1_0_chosha." - ".$menu1_0_title."▼</a></li>\n";
}
複数レコードなのでシリアライズを使ってみたのですが、
これは問題ないでしょうか?
>>894
長くなりすぎると思ったのでその部分を省略していました。
実際はmemcached->getも上の方で実行しています。
誤解を招く表現で申し訳ありません。
0897nobodyさん
2013/01/02(水) 21:20:30.84ID:BJXyvJDc説明が下手で申し訳ありません。
mysqlからクエリ結果を取得する時には
『mysql_fetch_array』を使うというのはわかるのですが、
キャッシュに保存されたクエリ結果の取得なので
どんな関数を使えばいいのかわかりません。
『mysql_fetch_array』を使って以下のようにしても良いのでしょうか?
while($row =mysql_fetch_array($row)){
$menu1_0_title = $row["book_title"];
(省略)
}
echo "<li><a href=\"./".$menu1_0_no.".html\">".$menu1_0_chosha." - ".$menu1_0_title."▼</a></li>\n";
}
0898nobodyさん
2013/01/02(水) 21:27:42.20ID:???配列の状態でキャッシュに入れておいて、foreach文かfor文でループさせれば同じことができるよ。
例えば以下のような感じ
foreach($rows as $row) {
〜〜
0899nobodyさん
2013/01/03(木) 00:06:28.30ID:g593pwmYありがとうございます。
foreachを使い、
>>893 で教えていただいたように順番を変更しました。
serializeを使うとキャッシュがある時に表示しなくなるので外してみました。
キャッシュ有りでもキャッシュを読んでくれないのですが、
何がまずいのでしょうか?
0900nobodyさん
2013/01/03(木) 00:07:54.37ID:g593pwmY$memcached->connect("localhost", 11211);
if (($row = $memcached->get("bookcache")) !== false) {
//$row = unserialize($row);
foreach($row as $row2){
$menu1_0_title = $row2["book_title"];
$menu1_0_no = $row2["book_no"];
$menu1_0_chosha = $row2["book_chosha"];
if(empty($menu1_0_chosha)){
$menu1_0_chosha = "不明";
}
echo "<li><a href=\"./".$menu1_0_no.".html\">".$menu1_0_chosha." - ".$menu1_0_title."●</a></li>\n";
}
}else{
$my_Row = mysql_query("SELECT book_id,book_no,book_title,book_chosha FROM book_table ORDER BY book_id DESC LIMIT 0,50",$my_Con);
while($row = mysql_fetch_array($my_Row)){
$menu1_0_title = $row["book_title"];
$menu1_0_no = $row["book_no"];
$menu1_0_chosha = $row["book_chosha"];
if(empty($menu1_0_chosha)){
$menu1_0_chosha = "不明";
}
echo "<li><a href=\"./".$menu1_0_no.".html\">".$menu1_0_chosha." - ".$menu1_0_title."▲</a></li>\n";
}
//$row = serialize($row);
$memcached->set("bookcache", $row, MEMCACHE_COMPRESSED, time() + 600);
}
0902nobodyさん
2013/01/03(木) 23:13:48.39ID:g593pwmYDBのクエリ結果をキャッシュに保存したいんです。
0904nobodyさん
2013/01/03(木) 23:43:17.12ID:???複数レコードです。
book_id (int)
book_no (varchar)
が英数字で
book_title (varchar)
book_chosha (varchar)
が日本語です。
全てUTF-8にしています。
0905nobodyさん
2013/01/04(金) 13:21:05.26ID:???0906nobodyさん
2013/01/04(金) 13:25:26.40ID:???0907nobodyさん
2013/01/04(金) 13:58:21.41ID:???>>900の
$memcached->set("bookcache", $row, MEMCACHE_COMPRESSED, time() + 600);
は複数レコードのデータになってんの?
あと、型はarrayだろ
DBのデータ型はどうでもいい
memcacheはresourceじゃなきゃ自動でシリアライズするみたいだから、
arrayならそのままでよさそうだな
0908nobodyさん
2013/01/04(金) 23:49:31.57ID:EuFkCruDわかりやすく説明していただけないでしょうか?
0909nobodyさん
2013/01/05(土) 00:03:01.67ID:jcFksBlimod_expiresのキャッシュ機能はレスポンスヘッダーにexpiresフィールドを付加してブラウザ側にキャッシュさせるものですよね?
つまり、あるデータベースにアクセスするページがあるとして、このページに「初めて」ユーザが5000人アクセスしてきた場合、
5000回データーベースにアクセスすることになるってことですよね?
2回目以降はブラウザのキャッシュが使われると思いますが最初は必ずどのユーザもデーターベースにアクセスすることになるっていう認識でいいでしょうか?
逆にsmartyのキャッシュ機能はテンプレートファイルごとにキャッシュした場合、
あるデーターベースにアクセスするページにユーザがアクセスしてきた場合、
その一人目のユーザのアクセス時にはデーターベースを読み込みにいきますが、そこで出力結果のキャッシュが生成されるので、
2回目以降のユーザはそのキャッシュを読みにいくことになるので、
結果的にはDBに負荷がかからないのはsmartyのキャッシュ機能という認識でよろしいでしょうか?
長文で申し訳ございません。
ご回答よろしくお願い致します。
0910nobodyさん
2013/01/05(土) 00:08:53.67ID:???>ユーザの指定した基準に基づいた Expires と Cache-Control HTTP ヘッダの生成
ブラウザのキャッシュは有効期限が切れたらサイトから再取得するが
その有効期間を伸ばしたりようはブラウザのキャッシュをHTTPヘッダをいじって制御する
SmartyやPHPのキャッシュ
<?php echo "hello"; ?>
これの実行結果はhelloだが毎度phpにアクセスして実行すると効率が悪いので
実行結果(この場合はhello)だけをhtmlなんかの別ファイルや変数(メモリ)にキャッシュしておくような仕組み
0911nobodyさん
2013/01/05(土) 00:12:15.27ID:jcFksBliありがとうございます。
SmartyやPHPのキャッシュのほうは、それは個々のユーザに対して行われるのですか?
>>909でもいってるように、たとえば一人目のユーザがアクセスしてきてキャッシュが生成されますよね?
次の2人目のユーザがアクセスしてきた場合はそのキャッシュが使われるのでしょうかか?
それとも2人目のユーザは2人目のユーザでまた別にキャッシュが生成されるのでしょうか?
0912nobodyさん
2013/01/05(土) 00:16:07.99ID:???mod_expiresが動的コンテンツをキャッシュできるかは知らんけど
だいたい>>909の認識でいいんじゃない
使用目的と照らし合わせるとその選択肢ではsmartyのキャッシュ機能で正解かと
0914nobodyさん
2013/01/05(土) 00:23:50.22ID:???0918nobodyさん
2013/01/05(土) 11:12:27.29ID:???まぁ、そんなアホなことする人いないかw
0919nobodyさん
2013/01/05(土) 11:49:11.83ID:JD7D6E3pアクセス禁止するような処理を
header('HTTP/1.0 403 Forbidden');
により実行してますが、Chromeでは
「ウェブページへのアクセスが拒否されました」というメッセージが表示されるものの
Firefox 17.0.1では真っ白の何も書かれてないページが表示されます。
IE(version 9)でも別のページより推移してきた場合は
拒否された旨のメッセージが表示されますが
リロードしたときに真っ白の何も書かれてないページが表示されます。
ブラウザによって対応・非対応があるのでしょうか?それとも何か他に対処法があるのでしょうか?
0920nobodyさん
2013/01/05(土) 11:57:24.44ID:???0921nobodyさん
2013/01/05(土) 12:00:03.05ID:???403だと、サーバー側のエラーページを表示するかブラウザーが持ってるエラーメッセージを表示するかが、
ブラウザーやその設定によって異なる
0922nobodyさん
2013/01/05(土) 12:04:29.78ID:???403ではなく200でアクセス拒否のエラーページを表示するしかない
0923nobodyさん
2013/01/05(土) 12:05:07.27ID:???回答ありがとうございます。
echo 'test';をheaderのあとに入れてみたところ、
いずれのブラウザでもtestとだけ出力されます。
Chromeで表示されていた「ウェブページへのアクセスが拒否されました」は
表示されなくなりました。
>>921
回答ありがとうございます。
あああー なるほど。そういうことですか。
でも何も表示されないというのは、どっちのメッセージを表示しようとしてるんだろ。。
0925nobodyさん
2013/01/05(土) 12:55:35.56ID:???ヘッダーだけ出力するということは
空白ページを出力するのと同じことだよ
ヘッダーはユーザーには見えないからね
0926nobodyさん
2013/01/05(土) 13:04:06.42ID:???ヘッダさえ出力すればあとは全部ブラウザが勝手に
エラーページ生成してくれるもんだと思ってました。
ありがとうございました。エラーページ自作することにします。
0927nobodyさん
2013/01/05(土) 13:32:29.08ID:???0928nobodyさん
2013/01/05(土) 13:41:23.46ID:???0929nobodyさん
2013/01/05(土) 22:26:54.88ID:EDQDuImzあるページからpreg_matchで任意の文字列を取得してすべて表示するにはどうしたらいいでしょうか?
URLを全て取得したいのですが、下の例では1つしか取得できません…
$url = "http://example.com/test.html";
$html = @file_get_contents($url);
$html = mb_convert_encoding($html,mb_internal_encoding(),"auto");
if(preg_match("/<a href='(.*?)'>/i",$html,$matches)){
echo $matches[1];
}
0930nobodyさん
2013/01/05(土) 22:27:26.77ID:???0931nobodyさん
2013/01/05(土) 22:37:08.27ID:???0932nobodyさん
2013/01/05(土) 22:50:09.82ID:???<?php
$url="http://ava.pmang.jp/clans/ranking?page=1&type=clan";
$html = file($url,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
$htmlsource = "";
foreach($html as $key => $val){
$htmlsource .= trim($val);
}
preg_match_all("/<a href=.*?>/", $htmlsource, $linkarray);
print_r($linkarray);
?>
こんな感じにしたよ
0933nobodyさん
2013/01/05(土) 23:07:32.50ID:EDQDuImzありがとうございます!良回答乙!
0935nobodyさん
2013/01/06(日) 04:53:35.66ID:???0936nobodyさん
2013/01/06(日) 10:41:48.60ID:???皆さんのアドバイスのおかげでまともにキャッシュが応答するようになりました。
どうやらもっと早い時期に動くようになっていたようなのですがNginxのリバースプロキシが応答している事に気付かずにあれこれ悩んでいたのですが、先程ふと思い立ってプロキシの有効期間を1分にして動作確認を行ったところページ内のmemcacheは全て正常に動作していました。
あとはmemcached、リバースプロキシ、expiresヘッダそれぞれの有効期間を調整するだけです。
本当にありがとうございました。
0937nobodyさん
2013/01/06(日) 19:45:56.02ID:???0938nobodyさん
2013/01/06(日) 22:21:55.72ID:5o7VoGpS【PHPのバージョン】5.2.17
【質問内容】
PHPでmecabを利用し、名詞を抽出したいです。
<?php
$mecab = mecab_new();
$str = 'MeCab extensionのインストールは大変だった。私は猫が好きです。猫カフェに月2回は行っています。最近は寒いですね。明日は洋服を買いにルミネに行きたいです。2013年になりましたね。今現在、JavaScript、PHP、Javaを勉強しています。';
//名詞を格納する配列
$noun_array = array();
if($node = mecab_sparse_tonode($mecab, $str)){
while ($node){
$node_array = mecab_node_toarray($node);
if($node_array["stat"] != 2 && $node_array["stat"] != 3 && preg_match("/名詞/", $node_array["feature"])){
print "OK";
}else{
print "NO";
}
$node = mecab_node_next($node);
}
}
?>
このようなプログラムを書きましたが上手く動きません。
print $node_array["feature"];
をするとちゃんと'名詞'が含まれた文字列も出力されるのですが。
0939nobodyさん
2013/01/06(日) 22:24:44.53ID:???すごいな
0941nobodyさん
2013/01/06(日) 22:30:08.87ID:???0942nobodyさん
2013/01/06(日) 23:27:44.59ID:5o7VoGpSprint $node_array["feature"];
を試すと、名詞が含まれる文字列も出力されるのですが、
if($node_array["stat"] != 2 && $node_array["stat"] != 3 && preg_match("/名詞/", $node_array["feature"])){
ここのpreg_match("/名詞/", $node_array["feature"]) が上手く行かなくてエラーになっているみたいです。
色々試したのですが、自分ではどうしたらいいか分からなくて
0943nobodyさん
2013/01/07(月) 00:09:23.17ID:???0944nobodyさん
2013/01/07(月) 00:31:54.96ID:???0945nobodyさん
2013/01/07(月) 00:42:10.19ID:???0948nobodyさん
2013/01/07(月) 09:10:23.71ID:???馬鹿しかいない
0949nobodyさん
2013/01/07(月) 10:03:22.02ID:???0950nobodyさん
2013/01/07(月) 10:25:03.76ID:???ハイレベルでハイグレードな大ネタですね。
0951nobodyさん
2013/01/07(月) 12:24:50.64ID:???キャラクターコードだけにw
0952nobodyさん
2013/01/07(月) 13:19:05.57ID:???0953nobodyさん
2013/01/07(月) 13:42:27.90ID:???0954nobodyさん
2013/01/07(月) 14:03:54.38ID:???0955nobodyさん
2013/01/07(月) 14:08:23.67ID:???0956nobodyさん
2013/01/07(月) 14:30:38.19ID:???0957nobodyさん
2013/01/07(月) 18:46:56.49ID:d/5dHw2t$array1 = array();
$value = array(1, 1);
$array1['test'] = $value;
みたいにできるのか教えてください。
0958nobodyさん
2013/01/07(月) 18:47:54.41ID:???0960nobodyさん
2013/01/07(月) 20:03:41.17ID:???0961nobodyさん
2013/01/07(月) 20:46:09.62ID:???0962nobodyさん
2013/01/07(月) 20:56:11.14ID:???0964nobodyさん
2013/01/07(月) 21:16:50.33ID:???0965nobodyさん
2013/01/07(月) 23:31:28.47ID:Ba3rRhi9↑の文字列のから「100」と「22」と「3」(数字は変動します)を取り出そうと思い
下記の文を書きましたが、最初の1つしか取り出さないようです。
複数取り出すにはどのようにしたらよいでしょうか?
$content = "a=100% b=22% hogehoge=xx% c=3%";
preg_match("/\=([0-9]{1,3})%/", $content, $matches);
echo $matches[1];
echo $matches[2];
echo $matches[3];
レス数が950を超えています。1000を超えると書き込みができなくなります。