【PHP】下らねぇ質問はID出して書き込みやがれ 100
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/10/27(水) 17:41:33ID:2BwSQxVQ過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 99
http://hibari.2ch.net/test/read.cgi/php/1286938893/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0293nobodyさん
2010/11/02(火) 11:38:40ID:MFB4pbx+phpでsmtp叩いた環境が違うんじゃね
って話だが?
0294nobodyさん
2010/11/02(火) 11:44:22ID:???0295nobodyさん
2010/11/02(火) 12:17:57ID:???・正しいphp.iniファイルを修正したのかどうか。(phpinfoで確認)
・Apacheを再起動したかどうか。
・sendmail_from は正しいメールアドレスを設定しているかどうか。
・POP before SMTP の可能性はないか。
パケットモニタしてみればHELOコマンドの時点で蹴られてるのかどうかなどが
わかるが・・・
0296nobodyさん
2010/11/02(火) 13:05:10ID:???環境がいまいちよく分からないからあれだけど厳しい所だとメルアドのドメインと送信者のドメインを
照合して弾いている所もあるからね。
0297nobodyさん
2010/11/02(火) 14:29:22ID:???ちなみにApacheのログにはメール送信の記録は残らんと思うぞ。
PHPのmail関数が直接MTAを叩きにいくはずだから、記録があるなら
MTAのログだろう。
今回はWindowsでMTAを入れてないわけだからniftyのSMTPサーバーにしか
ログは残ってないことになるわな。
0298nobodyさん
2010/11/02(火) 14:52:51ID:3UDUD+H/0299nobodyさん
2010/11/02(火) 14:53:30ID:MFB4pbx+0300nobodyさん
2010/11/02(火) 14:56:56ID:???0301nobodyさん
2010/11/02(火) 15:42:00ID:???PHPのmail関数は直接sendmailにアクセスするわけだから。
0302nobodyさん
2010/11/02(火) 15:51:00ID:???mail() の Windows 版実装は、Unix 版実装とは 多くの点で違います。 第一に、メッセージの生成にローカルの
バイナリは使用せず、 ソケットを通じて直接操作するだけです。 これは MTA がネットワークソケットを listen している
必要があるということを意味します(ローカルホスト、リモートマシン どちらでもかまいません)。
0303nobodyさん
2010/11/02(火) 16:28:43ID:???Apacheを経由するわけじゃないからApacheのログには
メール送信の記録は残らないって話してんの。
backgroundの実装の話は>>282,297の流れと関係ないだろ?
0305nobodyさん
2010/11/02(火) 17:08:19ID:???環境わからんけどsendmail_path指定してるってことない? 確かこれの指定があれば優先されるんだったよな
0306nobodyさん
2010/11/02(火) 17:21:43ID:???物凄く違和感がある
//ini_set('display_errors', true);
namespace newspace;
echo 1;
0307306
2010/11/02(火) 17:27:43ID:???0309nobodyさん
2010/11/02(火) 19:47:40ID:???皆我慢してるんだぞ。今は嵐が過去るのをじっと我慢。つまらなくなったらいなくなるさ。
0310nobodyさん
2010/11/02(火) 19:57:16ID:???0311nobodyさん
2010/11/02(火) 20:05:46ID:Z+1BHNaUfunction __construct() {
return"22";
}
}
returnの22は取れないんだっけ?
0312nobodyさん
2010/11/02(火) 20:19:39ID:???コンストラクタは基本的にプロパティをセットする場所と思えばいい
そういうもの作るならstaticメソッドで作ってください
0313nobodyさん
2010/11/02(火) 22:05:58ID:???戻り値が取れないのは、生成側のセマンティクスがそうなっているからという理由だけでなく、そういう用途のために用意されたものではないから。
またコンストラクタで処理が失敗した場合は、きちんと例外を投げてインスタンスの生成を阻止するのが筋。
なんつって
0315nobodyさん
2010/11/02(火) 22:48:28ID:???注意:
もし特定の haystack に needle があるかどうかを調べるだけの場合、 より高速でメモリ消費も少ない strpos() を代わりに使用してください。
0316nobodyさん
2010/11/02(火) 22:51:36ID:???同じような処理を何個も並べるか1つだけ正規表現使ってやるかのどっちがいいかって質問だろ
0317nobodyさん
2010/11/02(火) 22:53:57ID:???0318nobodyさん
2010/11/02(火) 23:15:49ID:???じゃねえよ
strposで2件10万ループ
0.17
strposで3件10万ループ
0.24
strposで4件10万ループ
0.31
preg_matchで2件10万ループ
0.19
preg_matchで3件10万ループ
0.2
preg_matchで4件10万ループ
0.2
3件以上はpreg_match
0319nobodyさん
2010/11/02(火) 23:27:33ID:???http://java-house.jp/ml/archive/j-h-b/017625.html#body
(略)
ベンチマークプログラムはソースコードを公開すべきです。なぜ公開しないの
か。「ベンチマーク対策を防ぐため」というのは詭弁でしょう。どうやったっ
て解析はされるものです。それより、
どういうコードだからこういう結果になった
と、ベンチマーク結果を見た者が判断できるように、ソースコードを公開すべ
きです。
ソースコードの公開されていないベンチマークプログラムは信頼しない方が良
いでしょう。
高木 浩光@電子技術総合研究所
http://www.etl.go.jp/~takagi/ (工事中)
0320nobodyさん
2010/11/02(火) 23:29:41ID:???正規表現次第?
0321nobodyさん
2010/11/02(火) 23:35:58ID:???$s = microtime(true);
$c = 0;
$str = "hogehoge";
for ($i = 0; $i < 100000; $i++) {
if (strpos($str, "mogemoge") || strpos($str, "hugahuga") || strpos($str, "hogehoge")) {
$c++;
}
/**
*preg_matchの場合
*
*/
// if (preg_match("/(mogemoge|hugahuga|hogehoge)/", $str)) {
// $c++;
// }
}
echo microtime(true) - $s . "\n";
echo $c;
意図的にhogehogeを最後に持ってきてるベンチだから
最初のstrposにhogehogeが入ってればstrposが早いのは当然
ただ平均的に考えた場合preg_matchのほうが上
0322321
2010/11/02(火) 23:36:43ID:???if (strpos($str, "mogemoge") || strpos($str, "hugahuga") || strpos($str, "hogehoge")) {
$c++;
}
↓に訂正
if (strpos($str, "mogemoge")!==false || strpos($str, "hugahuga")!==false || strpos($str, "hogehoge")!==false) {
$c++;
}
0323nobodyさん
2010/11/02(火) 23:40:05ID:???strstrの引数逆。
0325nobodyさん
2010/11/02(火) 23:49:27ID:???ちなみに>>321のコードをhogehogeを先頭にした場合
strposは1/3の時間になるがpreg_matchでは変わらない
結論としてstrposは関数呼び出しに比例して最悪実行時間が上がるが
preg_matchではそうではない
0326nobodyさん
2010/11/02(火) 23:52:14ID:???0327nobodyさん
2010/11/02(火) 23:57:41ID:???必要な機能で選ぶべきだ。
0328nobodyさん
2010/11/03(水) 00:06:04ID:???0329nobodyさん
2010/11/03(水) 00:07:08ID:???0330nobodyさん
2010/11/03(水) 00:19:00ID:???0331nobodyさん
2010/11/03(水) 00:28:16ID:???最初のほうでマッチする保証があればstrposのほうが早いから
少なければ少ないほどstrposがよくて
多ければ多いほどpreg_matchのほうがよい
0332nobodyさん
2010/11/03(水) 01:04:22ID:???実用上はさして差は無いと言えるんでは。
システム全体ではDBアクセスなどのほうがボトルネックになりそう。
0333nobodyさん
2010/11/03(水) 01:20:12ID:???preg_match("/hoge/",$str)とか正規表現使ってないものは確かに俺もないとは思うが目くじら立てるほどでもないよな
0334nobodyさん
2010/11/03(水) 09:01:46ID:???(あえて)preg*しか使ってはいけない
という規約を見たことがある
良い悪いは別にして、そういう考え方もあるって事だな
0335nobodyさん
2010/11/03(水) 09:08:17ID:???>>334
統一してる方が見やすいのは確かだな
pregは正規表現でも違っても使えるから統一するならこっちになるわ
0336nobodyさん
2010/11/03(水) 09:25:07ID:???でもifのコストが数万回繰り返してもその程度なら、別にstrposのループやin_arrayでいいんじゃ・・・とは思った。
検索対象語が大量に増えた場合に、「|」で連結してエスケープしないといけないpreg_matchよりは、
設定ファイルやDBから対象語を取得してそのままstrposやin_arrayにかけるほうがよっぽど楽な気が。
連結するまでもない少数なら尚更。
ちょっとしたスクリプトを書くときとかは個人の好みでpreg_match使っても全然OKだと思う。
>>334-335
ユーティリティとして関数やクラス作ってそれを使わせるようにすればいいんじゃね?
プログラムを読む側や書く側は実装がどうなっているか意識する必要はない。
0337nobodyさん
2010/11/03(水) 11:02:13ID:???最近までintvalかましてたよ
0338nobodyさん
2010/11/03(水) 11:07:15ID:???0339nobodyさん
2010/11/03(水) 11:11:07ID:???0340nobodyさん
2010/11/03(水) 11:28:10ID:???0343nobodyさん
2010/11/03(水) 12:06:13ID:???0344nobodyさん
2010/11/03(水) 14:40:28ID:???$a ++; // b !!
0345nobodyさん
2010/11/03(水) 16:16:38ID:bRpTkRq5parent::parent::でいいの?
0346nobodyさん
2010/11/03(水) 16:18:00ID:???0347nobodyさん
2010/11/03(水) 16:52:29ID:???スタティックメソッドはクラスの継承に関係ない(遅延静的束縛はある)ので
A < B < C … CからA::fを呼びたい場合は A::f() と明示する
インスタンスメソッドという意味なら出来ない、というより誤ったアプローチ
0350nobodyさん
2010/11/03(水) 16:58:10ID:???0351nobodyさん
2010/11/03(水) 17:03:37ID:???0352nobodyさん
2010/11/03(水) 17:24:00ID:rDLrrCQe急に届かなくなりました。
2〜3日前までは普通に送信出来ていたので、ここ数日で使えなくなった模様。
Softbank側で何か仕様が変わったということなんでしょうか。第5引数でreturn-pathは
指定してあります。
0353nobodyさん
2010/11/03(水) 17:36:03ID:???1、ただの遅延
2、大量に送りすぎてあっちでなんかされた。
公表されてない微妙なラインがあるんだよ。一時間にいくつまで 一日でいくつまでと。
PHP関係なさそう。
0354nobodyさん
2010/11/03(水) 17:37:14ID:???0355nobodyさん
2010/11/03(水) 17:42:05ID:???http://creation.mb.softbank.jp/mail/mail_attention.html
0356nobodyさん
2010/11/03(水) 17:51:08ID:rDLrrCQeqdmail使ったら送信出来ました。
ヘッダ関連かなーと思った次第ですが、どうなんでしょうねぇ。
>>354
サーセン
>>355
大丈夫です。
0357nobodyさん
2010/11/03(水) 18:06:20ID:bRpTkRq5変換じゃなくて、削除してくれる関数はないでしょうか?
0358nobodyさん
2010/11/03(水) 18:08:48ID:???0359nobodyさん
2010/11/03(水) 19:27:31ID:T4aX8FO7ミクシィチェックのモバイル版が、ページのタイトルを求めてきて困ってます…。
http://developer.mixi.co.jp/connect/mixi_plugin/mixi_check/spec_mixi_check
<form action="http://m.mixi.jp/share.pl?guid=ON" method="POST" >
<input type="hidden" name="check_key" value="xxxxxxxx" />
<input type="hidden" name="title" value="★ここを<!--#include virtual="title.php"-->みたいなので取得したい★" />
<input type="hidden" name="primary_url" value="★現在のURLhttp://example.com/" />
<input type="hidden" name="mobile_url" value="★現在のURLhttp://example.com/" />
<input type="submit" value="mixiチェック" />
</form>
現在開いているURLは$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']で表示するだけなんですが、
htmlの<title></title>に挟まれた文字を持ってきて表示するというのが出来ないです。
↓このperlスクリプトをphpに書き直したり改造したりして、何とかならないものでしょうか?
sub PageTitle {
local($fname) = @_;
local($result);
if (!open(FILE, $fname)) { &ShowError; }
while (<FILE>) {
if (m{((?i)<title>(.+)</title>)}) {
$result = $2;
last;
}
}
close(FILE);
($result eq '') ? 'unknown' : $result;
}
0361nobodyさん
2010/11/03(水) 19:37:48ID:???どっかのページのタイトル知りたければ そのperlみたいなことすればいい。
そもそも、そこに入れる文字と htmlのページのタイトルって関係あるのかね。 すきな文字いれればいいやん。
0362nobodyさん
2010/11/03(水) 21:12:41ID:T4aX8FO7あとは、<!--#include virtual="/title.php"-->を使って
phpを呼び出したページのタイトルを取得するだけなのですが、
つまずいてしまいました。どなたか助けてください。
title.php
<?php
function getPageTitle( $url ) {
$html = file_get_contents($url);
if ( preg_match( "/<title>(.*?)<\/title>/i", $html, $matches) ) {
return $matches[1];
} else {
return false;
}
}
//echo getPageTitle( $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] );//←★現在のURLにしたい。この部分を教えてください。
echo getPageTitle( "http://example.com/" );//←これは呼び出せた。
?>
>>360
うちのケータイはJavaScript使えないです…。
>>361
全てのページが同じタイトルというのはちょっと…。
wordpressとかのブログならタイトルタグで呼び出せばいいだけなんですけど、
shtmlでサイトを構築してしまっているので、そうもいかないです。
0363nobodyさん
2010/11/03(水) 21:13:58ID:???ブラウザで「表示」→「ソース」
<title>〜</title>の間をマウスで選択し、右クリック→「コピー」
メモ帳などに貼り付ける
0364nobodyさん
2010/11/03(水) 21:25:30ID:???環境変数のDOCUMENT_NAMEでphpにファイル名渡してやって、それ使って読み込めばいいんじゃね?
0367nobodyさん
2010/11/03(水) 22:11:05ID:???0368nobodyさん
2010/11/03(水) 22:16:02ID:???そっちの線も考えてみます。
>>365
一つ勉強になりました。
SERVER["DOCUMENT_URI"]
SERVER["HTTP_HOST"]
この辺りに目星を付けて、↓こんな感じにしてみましたけど、ダメでした。いったんメシを食います。
$http = 'http://';
echo getPageTitle( $http.SERVER["HTTP_HOST"].$_SERVER['REQUEST_URI'] );
0369nobodyさん
2010/11/03(水) 22:45:59ID:???の文字列が希望するURLにちゃんとなってるか確認した?
echoして確認してみそ
0370nobodyさん
2010/11/03(水) 23:39:22ID:f+TY6XzX0371nobodyさん
2010/11/03(水) 23:40:37ID:???0372nobodyさん
2010/11/03(水) 23:58:40ID:???0373nobodyさん
2010/11/04(木) 00:01:23ID:???0374nobodyさん
2010/11/04(木) 00:01:52ID:???> echo getPageTitle( "http://example.com/" );//←これは呼び出せた。
らしいので、変数の問題かと。
$http.SERVER["HTTP_HOST"] がおかしいと思うけどね。
0375nobodyさん
2010/11/04(木) 00:07:48ID:???そのページが自分のページのタイトルを取得しにいってとなるような気がするのですが・・・
まあ、パラメータつけといて、タイトル取得時はタイトル取得部を動作させないようにすればいいですけど。
だから、面倒でも、自分のページのURL取得したら、url->titleのデータを元に書き出すようにするしかないかと。
0376nobodyさん
2010/11/04(木) 00:38:01ID:???>>374
>$http.SERVER["HTTP_HOST"] がおかしいと思うけどね。
はい。この行でエラーが出たのでメシを食いに行きました。
>>375
その線が臭いです。
「やけにテストサーバの動作が鈍い時があったな」とか、飯喰いながら思ってました。
また一からやり直します。
>>369以下、phpinfo();です。
PHP Variables
_SERVER["DOCUMENT_URI"] /cgi-bin/index.html
_SERVER["HTTP_HOST"] example.com
_SERVER["REQUEST_URI"] /cgi-bin/
_SERVER["SCRIPT_FILENAME"] /home/ex/public_html/cgi-bin/genzai-title.php
_SERVER["SCRIPT_NAME"] /cgi-bin/genzai-title.php
_SERVER["SERVER_NAME"] example.com
_SERVER["PATH_TRANSLATED"] /home/ex/public_html/cgi-bin/genzai-title.php
_SERVER["PHP_SELF"] /cgi-bin/genzai-title.php
0377375
2010/11/04(木) 00:44:50ID:???PHPで取得すべきなのは ページのデータ (http://〜で始まるやつで取得するやつ)じゃなくて
サーバー内のファイルそのもの。
_SERVER["SCRIPT_FILENAME"] を取得してタイトル取得 PHPの連鎖は起きない。
shtmlの処理で書かれてんなら、おんなじもの フォームに入れるだけ。
0379nobodyさん
2010/11/04(木) 03:35:42ID:QBk0rcZEこれsqliteに置き換えて使いたいんですけど
Connection failed: SQLSTATE[HY000]: General error: 1 SQL logic error or missing database
って出るんだけどなんでですかね?
0380nobodyさん
2010/11/04(木) 03:39:59ID:???0381nobodyさん
2010/11/04(木) 04:02:05ID:QBk0rcZE0382nobodyさん
2010/11/04(木) 04:21:25ID:???>>369に書いたけど、getPageTitle()の中身の文字列をechoして確認してみた?
それと、>>374に書いたように $http.SERVER["HTTP_HOST"] は文法的におかしいでしょ。
SERVERじゃなくて$_SERVERにしないと。
あと、SERVER["DOCUMENT_URI"] に目星を付けて、と書いてる割に REQUEST_URI になってるけど大丈夫?
0385nobodyさん
2010/11/04(木) 07:25:23ID:H5un7pkx取得するやり方教えてください
0386nobodyさん
2010/11/04(木) 07:30:46ID:???$dc = $item->children('http://purl.org/dc/elements/1.1/');
0387nobodyさん
2010/11/04(木) 07:44:29ID:H5un7pkxありがとうございます
Node no longer existsって出ました
simplexmlオブジェクトをserializeしたらおこるみたいですね
うちのプロバイダ規制に巻き込まれてて携帯からだからお礼遅くなってすみません
0388nobodyさん
2010/11/04(木) 11:53:38ID:1iy2rlVw$_GETのパラメータで渡された ?day=2010-10-01 を検証したいとき
「これは日付を表す型だ」と一発で判別する方法(関数)ないでしょうか?
うまい表現出来ないので変な言い方になってますが
2010-11-01/2010-11/2010-01/2010-1
この4パターンを対象にしたいと思います。
ムリなんでしょうか?
カレンダーを生成するときに利用したいのですが…
お願いします
0389nobodyさん
2010/11/04(木) 11:55:56ID:???どれも日付にしたいんだよね?
0390nobodyさん
2010/11/04(木) 12:08:51ID:???strtotimeで 2010-1は無理だね。
ハイフンで切って2個なら1日とかにして checkdateではどうでしょう。
■ このスレッドは過去ログ倉庫に格納されています