【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等)・フレームワークは各該当スレへ
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ではどうでしょう。
0391nobodyさん
2010/11/04(木) 12:11:55ID:1iy2rlVwこんなものがあったんですね! ありがとうございました
0392nobodyさん
2010/11/04(木) 12:22:08ID:QBk0rcZEtry {
$dbh = new PDO('sqlite:test.db');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'update tab1 set tag1 = $tag1 where dirpass = $returnpass';
$stmt = $dbh->prepare($sql);
$stmt->execute();
}
catch( PDOException $e ) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
DB定義ってどこまで書けばいいのですか?
普段sqlitemanagerってのを使ってますが
0393nobodyさん
2010/11/04(木) 12:28:52ID:???<?php
$mode='';
if($mode=''){
echo "空";
}else{
echo "空ではない";
}
?>
これを実行すると「空ではない」と表示されます。
どういうことですか。
また、どうすれば空を検出できますか?
0394nobodyさん
2010/11/04(木) 12:33:49ID:???だから
比較ではなく代入になってます
0396nobodyさん
2010/11/04(木) 13:02:29ID:zPbOOHCy環境は
PHP5.16
CentOS5
です。
0398nobodyさん
2010/11/04(木) 13:16:46ID:???$tag1とか$returnpassってPHPの変数なんだろうけど、それだと展開されないんじゃない?
というかprepare使ってるのにプレースホルダ使わないの?
0399nobodyさん
2010/11/04(木) 13:19:55ID:zPbOOHCy調べられる範囲で経由してきたプロキシが分かればよいです。最悪、2つ前のIPを調べられる方法でもよいです。
やりたいことは、PHPにIPでのアクセスを設けたいのですが、
プロキシ経由でWEBサーバにアクセスしてるので、プロキシのIPが制限の対象になってしまいます。
0400nobodyさん
2010/11/04(木) 13:24:48ID:???制限しなければいいじゃん。
0401nobodyさん
2010/11/04(木) 13:35:48ID:???っていう事かなと思って話しをするけど
公開プロキシなんてどこかのリストから
使えるものを使うって感じなんだろうから
それを拒否リストかなんかに登録すればいいんじゃねーの?
0402nobodyさん
2010/11/04(木) 13:36:50ID:R2ciutWbこのへん見て調べては?
0403nobodyさん
2010/11/04(木) 13:42:14ID:???誰が?あなたが?
>プロキシのIPが制限の対象になってしまいます
プロキシを拒否りたいというわけではないということか
0404nobodyさん
2010/11/04(木) 13:45:05ID:???0405nobodyさん
2010/11/04(木) 13:49:46ID:???大元のIPを見て拒否りたいということだろう
匿名プロキシじゃなくて、わざと環境変数に元のIPを漏らしてるプロキシ使ってる場合は分かるけどそれ以外は無理
刑事事件になるようなものならプロキシ運営側に情報開示させてプロキシを逆に辿るようなこともできるだろうけど
0406nobodyさん
2010/11/04(木) 13:53:37ID:nDeItJ+nini_set()でも.htaccessでもshort_open_tagだけがOffにできません
ほかの設定は反映されるのですが・・
これは何が原因だと考えられるでしょうか?
0407406
2010/11/04(木) 14:44:39ID:nDeItJ+nもう一度.htaccessをアップロードしなおしたら反映されました
(さっき反映されなかったのはなぜだろう..ブラウザ側でキャッシュ見てたのかな)
あと、もともとini_set()ではshort_open_tagは設定できないようですね
0408nobodyさん
2010/11/04(木) 18:07:14ID:En7f4Y+6【PHPのバージョン】5.1.6
【連携ソフトウェア】特になし
【質問内容】
社内の既存のシステムでmail関数を使用してメールを送信してます。
内容はログやエラー内容なんですが、ネットワークの変更に伴い社内のSMTPを使用することになりました。
そこで現状のソースを崩さすにmail関数でSMTPを指定出来ればと考えてますが可能でしょうか?
0409nobodyさん
2010/11/04(木) 18:12:52ID:R2ciutWb0410408
2010/11/04(木) 18:28:52ID:En7f4Y+6そちらのアドレスについては確認しているのですが、やはりSMTPの指定は無理ということでしょうか?
0411nobodyさん
2010/11/04(木) 18:31:18ID:???デフォルトがlocalhostのになってるとは思うけど
0412nobodyさん
2010/11/04(木) 18:38:50ID:???会社のSMTP次第だとは思うけど
リレーでなんとかならないかな?
MTU何使ってるか知らないけどそっちのスレで聞いたほうが良いと思う
0413nobodyさん
2010/11/04(木) 18:40:25ID:???なんかぐだぐだで死にたい
0414nobodyさん
2010/11/04(木) 18:51:06ID:???0415408
2010/11/04(木) 18:53:48ID:En7f4Y+6MTAに何を使っているかは不明だったのですが、社内から使用するには制限は特にないといわれました。
mail()でリレーとか出来るということでしょうか?
0416nobodyさん
2010/11/04(木) 19:04:24ID:???いや、そのphpが動作するサーバのMTAの設定で
社内のSMTPサーバへリレーさせるって意味だよ
MTAの設定変更が無理なら、mail()では無理なので
SMTP指定ができる、PEAR:mailとかQdmailとかを使う事になる
0417nobodyさん
2010/11/04(木) 19:08:17ID:QBk0rcZEselectやwhereはできました
プレースホルダ使っても駄目でした
■ このスレッドは過去ログ倉庫に格納されています