トップページphp
1001コメント329KB

【PHP】下らねぇ質問はここに書き込みやがれ 54

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/09/09(日) 12:42:57ID:64tYOx8R
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 53
http://pc11.2ch.net/test/read.cgi/php/1188047468/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0588nobodyさん2007/09/19(水) 19:11:28ID:???
微妙すぎるよねぇ
0589nobodyさん2007/09/19(水) 19:37:54ID:???
30万箇所書いたとしても0.2秒という人間の感覚ではわかるようなわからないような差か
0590nobodyさん2007/09/19(水) 19:56:01ID:???
動作環境書かなきゃ意味梨
0591nobodyさん2007/09/19(水) 20:15:44ID:???
>>589
相当な差だろ
人間の感覚で云々言ってるうちは気にせずプログラムしてて良いと思うが
0592nobodyさん2007/09/19(水) 20:27:02ID:???
ループ中で使った場合なんかに簡単に0.05〜0.1秒程度の
レスポンス差を生んでしまうならそれはかなり大きな問題だと思うがな。
体感で分からんとか言ってるやつは、その0.1秒の差が
サーバーが対応可能な秒間アクセス数を確実に決定付けるという
高負荷サーバーのチューニングとかやったことないレベルの人だろう。

>>586
1番遅い結果が出た $test[abc] はPHPの処理でかなり遅い
シンボルの検索をやるのが致命傷なんだろう。
リファレンス使った参照渡しとかもこれが原因で処理遅いんだよな。
0593nobodyさん2007/09/19(水) 20:28:43ID:???
>>587
> for($i=0; $i<=300000; $i++){ if($test["ke$y"] == 'ghi'); }
> for($i=0; $i<=300000; $i++){ if($test['ke'.$y] == 'ghi'); }

この辺が遅いのは内部的にメモリのリアロケーションが発生するせいかね。
0594nobodyさん2007/09/19(水) 20:31:34ID:???
>>592
チューニングとはボトルネックになっているとわかってから
効果がある場所にかぎってやるもの。
すべての箇所でやるもんじゃない。
0595nobodyさん2007/09/19(水) 20:44:49ID:???
>高負荷サーバーのチューニングとかやったことないレベルの人だろう。

こういうこと言う奴はどうしようもないよな
その程度の負荷をチューニングするくらいならもっと元気のいいCPUにかえたほうがスマートなやり方
次にアルゴリズムとかデータ構造見直すとかした後の話だろ、カーネル再構築とか微妙なチューニング云々は
0596nobodyさん2007/09/19(水) 20:47:09ID:???
ワロス
0597nobodyさん2007/09/19(水) 20:47:18ID:6jpSclPO
ini_set("magic_quotes_gpc", 0);
で、magic_quote_gpcがオフにならないのですが、何が原因なのでしょうか・・・。
05985972007/09/19(水) 20:53:07ID:6jpSclPO
関係ないですが、

文字コードを変換した場合にも勝手にクオート入るんですね・・・。
厄介ですorz
0599nobodyさん2007/09/19(水) 20:55:20ID:???
imagegif($image,"test.gif")とやってもファイルに保存されずにブラウザに出力されるんだけど
なんでや
0600nobodyさん2007/09/19(水) 20:59:02ID:???
>>599
boolで返ってくるからリソースを別の所で吐いてるんでしょ
0601nobodyさん2007/09/19(水) 21:06:54ID:???
>>594
ボトルネックを最優先で改善するのは当然の話だが
全てのコードが満遍なく遅いってのはそれ以前の糞プログラム。
チューニングの余地すらない。全部書き直せ。
0602nobodyさん2007/09/19(水) 21:16:53ID:???
>>600
ゴメン単にパーミッション設定してないだけだった
0603nobodyさん2007/09/19(水) 21:32:47ID:+/kMM8g5
質問です。
OSはRedHat、verは4.4.6です(lolipopのレンサバです)

<?php
if($_POST['mail'] == 1 && strlen($_POST['message']) != mb_strlen($_POST['message'])){
mb_language("Ja");
mb_internal_encoding("SJIS");
$mailto = "自分のアドレス";
$subject = "件名";
$message = $_POST['message'];

$host = getenv("REMOTE_HOST");
$addr = getenv("REMOTE_ADDR");
if(!$host){
$host = gethostbyaddr($addr);
}
$ua = getenv("HTTP_USER_AGENT");
$message = $message . "\n\n--------------------------------------------------\n" . $host . "\n" . $ua;

mb_send_mail($mailto, $subject, $message);
}
?>

続きます。
06046032007/09/19(水) 21:33:38ID:+/kMM8g5
html側は
<form action="スクリプトのパス" method="POST">
<input type="text" name="message"> <input type="submit" name="submit" value="送信する">
<input type="hidden" name="mail" value="1">
</form>

1行目は文字数とバイト数が一緒なら半角のみと判断して送信しないようにしています。
このようなスクリプトを作成し、フォームからメールを送信しました。
すると、「ああ」とか「あああ」で送信できないのに「いい」とか「あいあ」だと送信できます。

これはどういう現象なのでしょうか?
0605nobodyさん2007/09/19(水) 21:34:44ID:???
答えられていない質問がスルーされるのはここの決まりですか?
0606nobodyさん2007/09/19(水) 21:45:59ID:???
どの質問を書き込んだのかおじさんに言ってみ
0607nobodyさん2007/09/19(水) 21:49:07ID:???
誰の義務になるの?
質問も自由。(マルチとスレ違いはだめだが)
答えるのも自由。

じゃないのか?
0608nobodyさん2007/09/19(水) 21:53:40ID:???
>>605 おめ童貞だろ
0609nobodyさん2007/09/19(水) 22:01:36ID:???
>>604
なんか2行目でmb_languageを今更jaに指定してるけど、
1行目の段階ではこれはどういう設定になってるの?
文字コードが変な解釈されてる気がするけど。
0610nobodyさん2007/09/19(水) 22:02:12ID:???
答えられない人は黙っててください
0611nobodyさん2007/09/19(水) 22:06:09ID:???
>>603
PHPは、送られてきた文字列のエンコードを知らないわけだから、
それなのにmb_strlenしてもデフォの内部エンコードが使われて、正しくないエンコードで計算されて期待した値にならない
06126032007/09/19(水) 23:17:34ID:+/kMM8g5
文字コードがおかしいということで
mb_language("Ja");
mb_internal_encoding("SJIS");
の位置を先頭にしたら動きました。ありがとうございました。
0613nobodyさん2007/09/20(木) 00:10:59ID:???
>>612
その2行を先頭に持ってきたくらいじゃ根本的な問題解決にならんよ
期待している"SJIS"以外が送られてきたら不具合出るんじゃね?
0614nobodyさん2007/09/20(木) 00:25:09ID:TpeEYAA9
>>484
亀レスすいません。
あの後試してみた所、ほとんどソースをまっさらにすると、すべてtrueとなりました。
どうも自分が改造する前のオリジナルのソースでセッションが貼られてるようです(←これが本当かどうかも怪しいですが)。
それに対し、自分も別にセッションを貼ったため問題が出たのかもと思いました。
そう思ったのは>>474で書いた print_r($_SESSION); の結果が、
↓のように、一度の print_r($_SESSION); 内で timing1 や timing2 が2回実行されていたからです
(今手元に正確な情報がないのでこんな感じだったということで)。

Array ( (略)=> Array ( [action] => process [timing1] => あ [timing2] => い (略) => Array ( [timing1] => ) [timing2] => い (略) => )

そして、timing1 が一度「あ」が入力された後、空文字?で上書きされてしまっていた為、問題がおきていたのかもと思いました。

もっとも、まっさらにしたソースでは使い物にならないので、既存のソースを解析する問題は残ったままとなりますが・・・。
ともあれアドバイスいただいた皆さん、どうもありがとうございます。
0615nobodyさん2007/09/20(木) 00:26:35ID:???
$_POST[a] = eregi_replace("/(\n)+$/", "", $_POST[a]);

動かないんですが・・・
06166032007/09/20(木) 01:01:49ID:ROB03O5/
>>613
フォームのあるhtmlはShift-JISで宣言してあるのですがそれでもダメでしょうか?
0617nobodyさん2007/09/20(木) 01:04:29ID:???
>>615
正規表現を ./ で括るのはpreg系だけだよ
0618nobodyさん2007/09/20(木) 01:08:45ID:???
>>617
ご指摘ありがとうございます
でもeregi_replace("(\n)+$"も動きません
0619nobodyさん2007/09/20(木) 01:17:43ID:???
とりあえずID出そうな。
0620山田真一2007/09/20(木) 10:38:42ID:RRR2JFqm
最近WEBの仕事を始めた者ですが自社のHPのPHPのページが

Warning: main(db/.php): failed to open stream: No such file or directory in /home/webmaster/public_html/link/yomi.php on line 21

Fatal error: main(): Failed opening required 'db/.php' (include_path='.:') in /home/webmaster/public_html/link/yomi.php on line 21


となって表示されません。
一応21行目を確認したら

require("db/$cfg[db_sql].php");

となっていました。
誰かわかる方教えてもらえませんか?
0621nobodyさん2007/09/20(木) 10:41:11ID:???
$cfg[db_sql]が設定されていない
0622nobodyさん2007/09/20(木) 10:42:41ID:???
自社のプログラムのトラブルをここで聞くか…
0623nobodyさん2007/09/20(木) 10:44:27ID:???
>>621
エスパーキターーーーーーーーーーー
0624nobodyさん2007/09/20(木) 10:51:06ID:RRR2JFqm
>621

具体的にはどうすればいいんですか?


>622

新人だけど一人でやってます・・・
0625nobodyさん2007/09/20(木) 10:52:08ID:???
会社でyomi-searchを使ってるのはなぜ?
0626nobodyさん2007/09/20(木) 11:40:37ID:???
>>623
require("db/$cfg[db_sql].php");
となってて
エラー内容が
Failed opening required 'db/.php'
となってりゃエスパーじゃなくてもすぐ分かるだろ。

>>624
$cfg["db_sql"] に適切なDB名を設定する。

これが>>625の言う通りyomi-searchのPHP版なら以下参照
ttp://sql.s28.xrea.com/src/
0627nobodyさん2007/09/20(木) 11:55:42ID:IWhkcLGD
>>620
そんな会社普通はすぐやめる。
webの会社でhpが表示されないとかありえない。
車売ってるくせにエンジン直せないのと同じこと。
0628nobodyさん2007/09/20(木) 12:14:13ID:???
いや、Webの会社とは一言も言ってないけどな。
新人1人しかいない時点でそりゃWebの会社じゃないだろ。
0629nobodyさん2007/09/20(木) 12:40:38ID:IWhkcLGD
最近WEBの仕事を始めた者が働いてる会社が八百屋なわけがない。
0630nobodyさん2007/09/20(木) 12:44:16ID:???
節操の無い奴を相手にしちゃ駄目

くだすれPHP(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1164617202/833
06316202007/09/20(木) 12:59:19ID:RRR2JFqm
>626
ありがとうございます^^早速見てみますね

>627
会社はWeb系ではないです^^;
0632nobodyさん2007/09/20(木) 12:59:24ID:???
>>628が何気に良い所を突いた件
0633nobodyさん2007/09/20(木) 13:59:56ID:KlmMrt1+
マジッククオートを自動で付加しているのですが、
POSTで取得したときに「ソ」や「表」に「\」が入りますよね。
これはどの時点での文字化けを防いでいるのでしょうか?
POSTで取得したデータを全てクオート解除しても大丈夫なのでしょうか?
0634nobodyさん2007/09/20(木) 17:01:09ID:KlmMrt1+
誰もいなすwww

preg_replace_callbackってPHP5.0.4と5.1.1で動き違うんだけど
5.1.1でバグ発生してるとかないよな?
0635nobodyさん2007/09/20(木) 17:05:29ID:???
>>633
ホントだ
なんでこんな余計なのが付加してるの?
06366352007/09/20(木) 17:24:46ID:???
よかった解決した
php.iniっての作ってmagic_quotes_gpc = Off
で再起動だね、、憶えておくよ
0637nobodyさん2007/09/20(木) 17:36:57ID:???
こらこらSJISの仕様で問題あるからそうなってんだよ
0638nobodyさん2007/09/20(木) 17:45:37ID:QNx3pq8z
>>636
勝手に解決するな
ini_setで解決しないんだよ
0639nobodyさん2007/09/20(木) 17:48:27ID:???
>>634
なんでそんな古いバージョンのを使うの?
0640nobodyさん2007/09/20(木) 18:44:06ID:???
>>639
レンタルサーバーに入っているからだろ?
0641nobodyさん2007/09/20(木) 18:55:42ID:???
>>638
目に余るレスを見かけたので続きのほうは以下のスレへ訪問よろ

くだらない質問でもど偉そうに聞いていいスレ
0642nobodyさん2007/09/20(木) 19:09:31ID:???
>>637
SJISの仕様でどんな問題があるの?
0643nobodyさん2007/09/20(木) 19:18:15ID:???
ヤフーでググれカス
0644nobodyさん2007/09/20(木) 19:25:21ID:???
答えられないやつはだまっとれ
0645nobodyさん2007/09/20(木) 20:57:35ID:bTS/b7yb
PHPとMySQLを使ってツリー構造をHTMLで表示させたいんですけど
一応、DBにカテゴリ名、ID、親IDとして保存させてるんですけど
表示させるときにどのようにしたらいいのかわからないのですが
どのようにしたらできますか?
0646nobodyさん2007/09/20(木) 21:00:30ID:???
一応じゃないスキーマを考える
06476452007/09/20(木) 21:05:10ID:bTS/b7yb
一応、親ノード取得してその親にポインタしてる子ノードを
探して・・ってやってるんですがすべてのノード表示させるようにできないんです
いくらノードを追加してもすべてのノードを表示させる方法ってないですか?
0648nobodyさん2007/09/20(木) 21:05:56ID:???
一応じゃないアルゴリズムを設計する
06496452007/09/20(木) 21:08:07ID:bTS/b7yb
どのようにして設計したらいいのですか?
一応、5日ぐらい考えたのですが僕の脳みそじゃ解決しません
0650nobodyさん2007/09/20(木) 21:11:12ID:???
わかんねーやつはレスすんな
0651nobodyさん2007/09/20(木) 21:13:45ID:???
どんだけ〜
0652nobodyさん2007/09/20(木) 21:32:07ID:???
全部じゃなきゃどこまで表示出来てんだよ
原因の切り分けをする努力を放棄してたら先に進むわけなし
0653nobodyさん2007/09/20(木) 21:38:09ID:???
どんだけ〜
06546452007/09/20(木) 21:47:26ID:bTS/b7yb
$sql = "SELECT * FROM `CATEGORIES` WHERE `親ノード番号` = {$親ノード番号} ";
$parent_nodes_result = mysql_query($sql);
while ($row = mysql_fetch_array($parent_nodes_result, MYSQL_ASSOC)) {
echo "<li>{$row['ノード名']}\n<ul>\n";
$sql = "SELECT * FROM `CATEGORIES` WHERE `親ノード番号` = {$row['番号']} ";
$child_nodes_result = mysql_query($sql);
while ($row = mysql_fetch_array($child_nodes_result, MYSQL_ASSOC)) {
echo "<li>{$row['ノード名']}</li>\n";
}
echo "</ul>\n</li>\n";
}

こんな感じなんですけど
これだと2階層までしか取得できないんです
0655nobodyさん2007/09/20(木) 21:48:57ID:???
もう一個付け加えれば3階層までできるじゃん!
06566452007/09/20(木) 21:53:25ID:bTS/b7yb
>>655
それがもっと多い階段まであった場合に、すごいソースになってしまうので
なんかwhileを使って出来ないかと思って考えてるんですがわからなくて
0657nobodyさん2007/09/20(木) 21:57:08ID:???
>>645
あなたみたいな人はフレームワークを使えばいい
思い通りの動作をやってくれるでしょう
0658nobodyさん2007/09/20(木) 21:57:52ID:???
線形で増えていくだけだから大した問題ではないよ。
すごいソースで何が悪い。見た目なんか気にするな。
0659nobodyさん2007/09/20(木) 21:58:29ID:???
>>654
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280408/?ST=oss
この辺読んで再チャレンジ
06606452007/09/20(木) 22:02:48ID:bTS/b7yb
みなさん返信ありがとうございます
>>654
読んでみます
06616452007/09/20(木) 22:03:42ID:bTS/b7yb
間違えました
>>660>>659へのレスです
0662nobodyさん2007/09/20(木) 22:04:29ID:???
木構造といったら、まず再帰を考えないか普通
0663nobodyさん2007/09/20(木) 23:27:38ID:???
どんだけ〜
0664nobodyさん2007/09/20(木) 23:42:57ID:mjQwk2aW
プログラムで実行される関数がどのファイルで定義されているかを効率的に
探す方法を教えてください。少し規模の大きなプログラムだと見つけるのに
時間がかかってしまします。
エディタの機能になるのでしょうか。もしそうであればそのエディタを
教えてください。
0665nobodyさん2007/09/20(木) 23:44:38ID:???
どんだけ〜
0666nobodyさん2007/09/20(木) 23:47:55ID:???
functionで検索〜
0667nobodyさん2007/09/21(金) 03:19:02ID:???
どんだけ〜
0668nobodyさん2007/09/21(金) 06:54:05ID:/lN3SBgs
$data = array("$data","$data2","$data3");
fputs($fp, implode("", $data));

$data = $data.$data2.$data3;
fputs($fp, $data);

どちらが負荷が低くなりますか?
0669nobodyさん2007/09/21(金) 07:29:03ID:???
>>668
上は関数呼び出しが2回多いから下のほうがいい気がする
0670nobodyさん2007/09/21(金) 07:35:53ID:???
>>669
どうもー。
下でいきます。
0671nobodyさん2007/09/21(金) 09:28:38ID:???
>>664
exuberant ctags
0672nobodyさん2007/09/21(金) 13:04:43ID:???
phpの標準関数を自分の作った関数で置き換えって出来ないですよね?
0673nobodyさん2007/09/21(金) 13:20:47ID:???
できる
0674nobodyさん2007/09/21(金) 13:46:29ID:???
ありがとう。自分で置き換えてみます
0675nobodyさん2007/09/21(金) 14:25:51ID:5JzPFtpG
phpでxml文書のノード名と属性の値を指定して部分的にデータを取得するには
どうすればよいですか?
0676nobodyさん2007/09/21(金) 14:37:00ID:???
>>675
SimpleXMLとかpearのXML_Unserializerとかを使えば良いんじゃ
0677nobodyさん2007/09/21(金) 14:41:31ID:QV6ADNlt
PEARのMDB2に乗り換えようとしているんですが、
require_onceしただけでStrict Standardsエラーがたくさん出るのは何故?
エラーレベルを高くしてるから?
どなたかよろしくお願いします。
0678nobodyさん2007/09/21(金) 14:49:28ID:fJKnQpQm
php5でpear使うと吐きまくるよ。
だから俺はpear使わない。
error_repoting E_STRICT とかでぐぐればエラー出さない方法はわかるとおもうけど。
厳密にはエラーっていうかワーニングか、動くしな
ちなみにオブジェクトをリファレンス渡ししたり、クラスのオーバーロードすると出る
0679nobodyさん2007/09/21(金) 14:50:42ID:???
>>677
そう

実際使うときはwarningあたりかE_ALLでログに全部書き出しだろうから
気にする必要ない
0680nobodyさん2007/09/21(金) 14:56:05ID:QV6ADNlt
>>678-679
ありがとうございます。
開発レベルではStrictで行いたいのですが、MDB2だけのエラーを非表示にできないんですか?
あるいはリファレンス渡ししない方法などはないのでしょうか。
0681nobodyさん2007/09/21(金) 14:59:59ID:5JzPFtpG
>>676
SimpleXMLの場合での取得方法がわからないんです。
<tag1 id="1" >
<tag2 >a</tag2>
<tag2 >b</tag2>
<tag2 >c</tag2>
<tag1 id="2" >
<tag2 >d</tag2>
<tag2 >e</tag2>
<tag2 >f</tag2>

の場合に<tag1 id="1" >のデータ(a,b,c)を取り出したいんですが
この場合SimpleXMLでだとどうすればよいのですか?
0682nobodyさん2007/09/21(金) 15:00:59ID:???
>>681
オブジェクトとして返されるから
それを取得するような感じでいいんじゃね?
0683nobodyさん2007/09/21(金) 15:12:23ID:5JzPFtpG
>>682
すんません、初心者でXMLのデータ処理をするのが初めてなので
取得方法自体がわからないんです。
どう書けばよいの?
0684nobodyさん2007/09/21(金) 15:12:57ID:fJKnQpQm
>>680
pearの
$a =& new ex();
って書き方の「=&」ここの部分を全部「=」に直せば問題は解決さ、どれくらいあるかわからないけどw

もしくはpearモジュル使う部分のファイルにだけerror_reporting(E_ALL);とか書いておけばいいんじゃねーの?
0685nobodyさん2007/09/21(金) 15:19:00ID:QV6ADNlt
>>684
後者の方法で頑張ります^^;
ありがとうございます。
0686nobodyさん2007/09/21(金) 15:45:01ID:???
>>683
うん、>>1は読んだ?
0687nobodyさん2007/09/21(金) 15:45:32ID:???
>>685
ファイルから置換すりゃーいいのに
■ このスレッドは過去ログ倉庫に格納されています