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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/23(木) 00:27:02ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

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

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

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
 しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0175nobodyさん2006/11/25(土) 12:38:54ID:???
んじゃstaticって何のためにあんの?
0176nobodyさん2006/11/25(土) 12:39:49ID:???
self::$aとすればよい
0177nobodyさん2006/11/25(土) 12:48:18ID:???
>>175
クラスをインスタンス化しないで呼び出すことができる。
0178nobodyさん2006/11/25(土) 13:08:30ID:???
つまり通常のfunctionと同じことになるって理解でいいんですかね

買い物カゴという「モノ」に商品を追加する「手続き」や、追加する個数という「データ」のように
オブジェクト設計としてはどういう扱いなんでしょうか?
0179nobodyさん2006/11/25(土) 13:10:36ID:???
PHP固有の機能じゃないよ
0180nobodyさん2006/11/25(土) 13:33:04ID:???
オブジェクト指向的には異端
0181nobodyさん2006/11/25(土) 13:53:53ID:???
htaccessで特定のディレクトリだけPHPの設定を変えようと思ったんだけどうまくいかない。

<IfModule mod_php4.c>
php_flag display_errors On
</IfModule>

htaccess自体は効いていて、PHPに関する部分だけ無視される…。

サーバにSSHで入ったら、mod_php4.cがなくて、代わりに libphp4.so がある…。
どうしたらいいんでしょうか?
0182nobodyさん2006/11/25(土) 13:55:38ID:???
だね。
汎用的で簡単な関数や定数を放り込んでおくのに使うくらいだな。
0183nobodyさん2006/11/25(土) 14:05:55ID:???
static変数ってどういう時に使うかよくわからないね(;´ω`)
0184nobodyさん2006/11/25(土) 14:08:47ID:???
<IfModule はロードされてなくてもエラーを出さないようにするって意味合いしかないから。
01851812006/11/25(土) 14:08:56ID:???
解決しました。
<IfModule sapi_apache2.c>でした…。
0186nobodyさん2006/11/25(土) 14:12:04ID:???
>>183
無理に使うことないよw
0187nobodyさん2006/11/25(土) 14:18:28ID:???
インスタンス毎に変数を持つ必要はないが
クラス内では共有する値が必要な場合にstaticなプロパティを使えばいい
要はグローバル変数でもいいんだけどクラス内でしか使わないから
クラスに押し込んでしまいたいものに使えばいい
0188nobodyさん2006/11/25(土) 14:36:37ID:NunClOiB
各検索サイトでの順位を調べるという良くあるやつを自分で作ってみています

YSTとgoogleは、そのままのHTMLを返してくれるので、splitとeregで何とかなりましたが
MSNは中身の無いものを返してくるので、困っています

スレ違いぽいですが、作ったことある方いらっしゃいませんでしょうか
0189nobodyさん2006/11/25(土) 15:01:06ID:???
>>188
君が言う中身がないものを返してくるソースを見せなよ。
どう指定したかもわからず答えようがない。
0190nobodyさん 2006/11/25(土) 15:17:37ID:???
このように記述すると、処理が通らないのですが、正しくはどのようにすれば
いいのでしょうか?

for($i=0; i<=29; i++)
{
sqlite_query($db,"INSERT INTO document_word (word{$i+1}) VALUES('{$Value[$i]}');");
}
01911882006/11/25(土) 15:17:48ID:???
すいません、文字コード変換を間違っていて中身がとんでいただけのようです
お騒がせしました
0192nobodyさん2006/11/25(土) 15:22:21ID:???
>>190
釣りだろうけど
for($i=0; i<=29; i++) ←
0193nobodyさん 2006/11/25(土) 15:26:54ID:???
>>192
すいません。for($i=0; $i<=29; $i++) でしたか?
しかし、なおしても通らないのですが。。。
ほかに原因はあるでしょうか?
0194nobodyさん2006/11/25(土) 15:29:42ID:???
>>193
マニュアルを読み直した方が良いよ・・・
0195nobodyさん2006/11/25(土) 15:33:29ID:???
うむ、それから状況説明が「通らない」だけとか回答してもらいたい気が微塵も感じられない
0196nobodyさん2006/11/25(土) 15:43:55ID:???
>>193
>>1
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
01971932006/11/25(土) 15:50:32ID:???
>>196
エラー内容は、ブラウザの表示がまっさらになる です。
0198nobodyさん2006/11/25(土) 15:52:09ID:???
>>197
テメェはマニュアル読んで来い!!
0199nobodyさん2006/11/25(土) 16:01:23ID:???
そもそも、やりたい事は何だよ
(word{$i+1})
って何したいのさ?
・根本的にやりたいに対して処理が間違ってる
・SQL文が間違ってる
ソースから読み取れる情報だとこの程度しか答えられんだろ
02001932006/11/25(土) 16:06:09ID:???
はい。お騒がせしました。
0201nobodyさん2006/11/25(土) 16:07:31ID:???
よしよし、俺がエスパー呼んできてやるから待ってろ。
0202エスパー2006/11/25(土) 16:09:44ID:???
ムリ
0203nobodyさん2006/11/25(土) 16:24:19ID:???
>>202
じゃあ、逆にできることをききたいが。
0204nobodyさん2006/11/25(土) 16:37:06ID:???
             __ ,.-¬- 、._
             / '´,  、   、 `ヽ、
          r´    / l ヽ  \ 、ヽ
           /  / /l.  l、 \  ヽ ', lヽ
        /, l. / /´ヽ lヽ   ヽ. ! ヽ. ト ヽ、
        '´|  V '__ヽ. ト\、_',|   ',|
         | l. ,| | __ \゙、ヽ.__ヽl.  ト.|
           lハlヘ|´ `   ヽ´ ``〉,^! | !
           l\l|    |    //ィ N    呼びましたか?
          | ハ ヽ  __   /ハ/ `       _
          '′lハn\ `ニ´/! !        ,イ |
           _,.-' /ヽ ` - ´ ,ハ\       | |ヽ
       _, - ' /   |  ヽェ、 '   | ヽー、    _ | ト. ヽ
  ,.、-‐ ´    /  |  /  〉   |   ヽ `⌒.l ヽ',ヽヽヽ
  / ヽ     〈  ,.-|ヽ/ ヽ-/ ヽ/|、  ,〉     | l_! ヽ ゙l
0205nobodyさん2006/11/25(土) 16:51:57ID:???
>>204の亀さにワロタ
AA探してたのかw
0206nobodyさん2006/11/25(土) 20:29:47ID:???
>>193

for($i=0; $i<=29; $i++)
{
sqlite_query($db,"INSERT INTO document_word (word) VALUES('{$Value[$i]}');");
}

これでいいんでない?
(word{$i+1}) ってのは次の行に挿入したいってことと予想。
挿入する場合は、自動的に次の行にはいるので (word{$i+1}) の$i+1はいらない。
0207nobodyさん2006/11/25(土) 20:32:01ID:???
こいつまた来たのか
0208nobodyさん2006/11/25(土) 21:51:05ID:???
CSV(data.csv)データとして↓というデータがあって

佐藤,サ行,22歳,サラリーマン
木村,カ行,31歳,自営業
工藤,カ行,18歳自営業
増田,マ行,25歳,サラリーマン
鈴木,サ行,20歳,サラリーマン
須藤,サ行,22歳,自営業

サ行という項目を選択orクリックすると 「佐藤:22歳」、「鈴木:20歳」、「須藤:22歳」
サラリーマンという項目を選択orクリックすると「佐藤」、「増田」、「須藤」

というように条件によって選択的にデータを一部取り出したいのですが、

<?php
$fp = fopen("data.csv", "r");
while ($data = fgetcsv($fp, 10000)) {
foreach ($data as $d) {
print $d . "<br>\n";
}
}
?>

とやったら全部表示されるとこまではいったんですがなかなかやりたいところまでたどり着けません。
ご助言お願いします。
0209nobodyさん2006/11/25(土) 21:54:15ID:???
くだらないというより、丸投げだな
0210nobodyさん2006/11/25(土) 21:58:31ID:???
とりあえず配列
0211nobodyさん2006/11/25(土) 23:34:41ID:GT4xD1Nx
fsockopenを使ってPOSTをリクエストし、結果のページをfreadしているのですが、
全てを読みきるのに10秒程度もかかってしまいます。ブラウザからの同内容のPOST
だとすぐに結果が返ってくるのですが、この違いは何によるものでしょうか。
HTTPのトレースを見る限りでは、ブラウザが特別なことをやっているようには見え
ないのですが...
ちなみにfreadで読んでいるのは本体?のhtmlだけで、そのhtmlから張られている
画像などのリンクは読みません。ブラウザは平行に?それらも読んでいるようなの
になぜPHPよりも格段に速いのでしょうか。
0212nobodyさん2006/11/25(土) 23:39:22ID:???
ダウンロードしたPHPマニュアル php_manual_ja.chm 開いても
表紙以外見れ無くないですか?
0213nobodyさん2006/11/25(土) 23:43:39ID:???
>>211
fclose忘れてスクリプトが回りつづけてるとか
02142112006/11/25(土) 23:57:11ID:GT4xD1Nx
>>213
freadのループの開始、終了時の時間差が10秒程度なのです。
PHPのfread関数の作りの問題(=改善不可)でしょうか...
0215nobodyさん2006/11/26(日) 00:01:48ID:???
普通はそんなにかからねえよ
PHP疑う前に自分の環境とコードを疑え
あとその部分のコード貼れ
0216nobodyさん2006/11/26(日) 00:04:06ID:???
PHPのバージョンは?
定かではないが、昔のバージョンでは遅かった記憶がある。
0217nobodyさん2006/11/26(日) 00:05:23ID:???
遅いってレベルじゃねーぞ
02182112006/11/26(日) 00:13:22ID:pPg02glY
レスあってうれしいですm(_'_)m

>>215
該当コードは↓です。正直、参考書からのパクリです(^^;

$socket = fsockopen(
$host
, 80 //port
, $errno
, $errmsg
, 10 //timeout
);
if ($socket == FALSE) {
return '';
}

fwrite($socket, $request);

$response = '';
while (! feof($socket)) {
$response .= fread($socket, 1024*100);
}

>>216
php-5.0.4-win32.zip
のを使ってます。「10日でおぼえるPHP5入門教室」という本に
ついてたCD-ROMに入ってたやつです。OSはXP+SP1です。

CGI、PHPの初心者です。Webサービスとやらに興味を持って
始めました。
0219nobodyさん2006/11/26(日) 00:16:45ID:???
TimeoutまでWaitしてるのは間違いなさそう
バッファ小さくしてみたら
0220nobodyさん2006/11/26(日) 00:18:16ID:???
>>281
何したいのかよくわからんが、web鯖が返すレスポンスを取得するんだったら
GETリクエスト投げないとだめだと思うが。
$request にまともなリクエストヘッダ入ってるか?

0221nobodyさん2006/11/26(日) 00:19:28ID:???
改行たりないとか
02222112006/11/26(日) 00:23:22ID:pPg02glY
>>219
バッファを小さく?それは考えてなかったので試してみます。

>>220
>>221
取得したいページ(html)は全て読めているのですが、
単にループで時間がかかっているのです。ループの前後で
time()の結果を取得して表示してみらたら10秒弱かかって
ました。
0223nobodyさん2006/11/26(日) 00:25:20ID:???
それじゃレスポンス来るまで待ってるのか
レスポンスの途中で引っかかってるのか
データ受信後に止まってるのかわからんじゃまいか
02242112006/11/26(日) 00:31:45ID:pPg02glY
>>223
print strval(time());
while (! feof($socket)) {
 $response .= fread($socket, 1024*100);
 print strval(time());
}
print strval(time());

とした結果です↓
1164468445
1164468445
1164468445
1164468445
1164468446
1164468446
1164468446
1164468446
1164468446
1164468452
1164468452

6秒かかっていっきに読んでるようです。
じつはfsockopenのタイミングで接続していない?
なわけないですねその前にfwriteしてるし...
0225nobodyさん2006/11/26(日) 00:41:47ID:???
>>224
だからそれじゃ分からないんだってばよ
各ループでデータは読み出せてるの?
9回から10回で突然6秒停止してるのが非常に気になるけど
0226nobodyさん2006/11/26(日) 00:43:47ID:???
MTUの設定ミスでパケロスとか前スレにいたな。
キャッシュが効いてるとか、よほどでかいテキストでDeflateのメリットが出てるとか、
IEが早いケースはありうるけど超考えにくいね。情報不足で何ともいえないけど。
0227nobodyさん2006/11/26(日) 00:48:24ID:???
>>216
5.0.4だとそれっぽいのが見当たらないな。
こういうケースはあるみたいだけど。
http://bugs.php.net/bug.php?id=32688
0228nobodyさん2006/11/26(日) 00:49:01ID:???
>>224
これのせいで遅くなっているってことはないか?
 $response .= fread($socket, 1024*100);

文字列をどんどん連結していくタイプは、文字列が長くなるにつれて劇的に遅くなる。
配列にプッシュしていく方がはるかに高速なので、試してみては?

$chunks = array();
while (! feof($socket)) {
 $chunks[] = fread($socket, 1024*100);
}
$response = implode($chunks);
02292112006/11/26(日) 00:53:05ID:pPg02glY
>>225
ループ内のprintで、その時点での全受信データ長も出力してみました。
1164469801
1164469802-->556
1164469802-->4703
1164469802-->8818
1164469802-->12578
1164469802-->16963
1164469802-->20723
1164469802-->28859
1164469808-->28859
1164469808

6秒かかってるのにデータ長が変ってない???
0230nobodyさん2006/11/26(日) 00:53:07ID:???
>>228
たしかにリアロケートで時間食ってるのかも
バッファが馬鹿でかいところからして怪しげな感じ
0231nobodyさん2006/11/26(日) 00:59:53ID:???
HTTPリクエストがおかしいと時間かかるときあるよ。
HTTP1.1でリクエストしてるのに、Closeしてないときとか。
0232nobodyさん2006/11/26(日) 01:03:02ID:???
可能性は無限大だな、よくない意味で
0233nobodyさん2006/11/26(日) 01:03:12ID:???
>>229
content-lengthを返しているなら、適切な分読み込んだ時点で処理を打ち切るように改良してみたら?
0234nobodyさん2006/11/26(日) 01:11:13ID:???
>>212
そうだんです
0235211,2292006/11/26(日) 01:12:01ID:pPg02glY
>>228
なるほど!
試して見ましたが解決しませんでした。
でも書き換えます(リアロケートのロスはあるので)。
アドバイスありがとうございました。

>>233
なるほど!
最後に時間がかかるなら最後までいかなければ良い、と。
柔らか頭ですねぇ(古い表現ですが(^^;)
その線で対応できるかもしれないので色々試してみます。
0236nobodyさん2006/11/26(日) 01:22:32ID:???
>6秒かかってるのにデータ長が変ってない???
相手の出したデータ全部読み終わってるのに
さらに次を読もうとして待ってる典型例に見えるな。
>>233で正解だろう。
0237nobodyさん2006/11/26(日) 01:24:47ID:???
原因究明が終わったら curl 関数も調べてみましょう。
なかなか便利な関数ですよ。
0238nobodyさん2006/11/26(日) 01:27:43ID:???
PEAR初心者です

あるサービスパッケージを使いたくて入れてみたら
エラーでまくりでそれをたどり永田、ファイル名検索して
ダウンロードしてきてを5回ぐらい繰り返して
デレクトリとか湧け分からなくなりながら
死ぬ思いしてやっと動作したのですが、みなさんどうやられてるのですか
簡単な方法教えてください
0239nobodyさん2006/11/26(日) 01:28:07ID:???
curl直に叩くのはマンドクサイです
0240nobodyさん2006/11/26(日) 01:42:19ID:???
>>238
普通に pear install パッケージ名
0241nobodyさん2006/11/26(日) 02:29:10ID:???
>>239
そうか。
いろいろできて便利な関数だと思うけどな。
0242俺様2006/11/26(日) 02:42:31ID:???
echoで文字出力を覚えました。つぎは何を覚えればいいですか?
0243nobodyさん2006/11/26(日) 02:55:59ID:???
>>242
printで文字出力
0244俺様2006/11/26(日) 03:06:11ID:???
>>243

それも覚えました。次は何を覚えればいいですか?
0245nobodyさん2006/11/26(日) 03:08:41ID:???
>>244
print_rで配列の中身を出力。
第二引数で出力内容を変数に取り込む。
nl2brで改行コードを書き換えてブラウザ上でも改行して表示する。
0246nobodyさん2006/11/26(日) 03:10:13ID:???
>>244
不動点定理
0247nobodyさん2006/11/26(日) 03:19:41ID:???
>>244
簡単な条件文でも覚えれ。
それができれば、ほとんどなんでもできるようになる。
繰り返し処理を楽にするためにループ関数でも覚えればなおよし。
0248nobodyさん2006/11/26(日) 03:44:25ID:???
>>244
次に何をすれば良いか自分で考える練習
0249nobodyさん2006/11/26(日) 03:49:08ID:HPxv5p71
ヴァーチャルサーバで運営しているマシンなのですが1つのホストだけ
<?xml version="1.0" encoding="UTF-8"?>
なんて出力をするんですがこれにPHPが反応してエラーを出してしまいます。
サーバ全体で.htmlもphpとして見るようにしてあるので.htaccessか何かで
特定のディレクトリのみただのhtmlとして見るようにさせる事は可能でしょうか?
0250nobodyさん2006/11/26(日) 04:44:20ID:???
short_open_tag = off
0251nobodyさん2006/11/26(日) 06:00:46ID:???
file_get_contents関数についての質問です。

file_get_contents("sample-1.php?data=ABC");
という風に引数を渡したいのですが、エラーになってしまいます。
エラー内容→「failed to open stream: Invalid argument in C:\Program Files〜」
ちなみに
file_get_contents("sample-1.php");
のようにファイル名だけの場合はエラーは起きませんでした。
どうしたらいいですか?
0252nobodyさん2006/11/26(日) 06:20:36ID:???
>>251
file_get_contents("sample-1.php?data=ABC"); ファイル名ではない
file_get_contents("sample-1.php"); 読み込まれるのはsample-1.phpのコード

実行結果を取得したいのであれば
file_get_contents("http://example.com/sample-1.php?data=ABC";);
(fopen_wrappersが有効であれば、ファイル名として"URL"を指定する事ができる。)

ただしパフォーマンス的には推奨されない。可能な限りincludeで処理すべき
0253nobodyさん2006/11/26(日) 06:49:00ID:???
>>208
レスがないようなのでヒント
$dを,でexplodeして結果を見てみるべし。
0254nobodyさん2006/11/26(日) 09:33:58ID:JtN58Jtp
"うんこ野郎" 

と 

'うんこ野郎'

って何が違うんですか?
たまに"が書き変わってて
動かない場合とかあるんですが
0255nobodyさん2006/11/26(日) 09:38:03ID:???
>>254
$unko = 'まんこ';
echo "$unko野郎"; //まんこ野郎
echo '$unko野郎'; //$unko野郎

http://www.php.net/manual/ja/language.types.string.php
ここに引用符と二重引用符の違いが載ってる
0256nobodyさん2006/11/26(日) 10:27:07ID:???
>>249
AddType application/x-httpd-php .php
02572082006/11/26(日) 10:47:08ID:???
>>253
ありがとございます

やってみて分からなくなったらまた来ます。
0258nobodyさん2006/11/26(日) 11:22:10ID:???
大文字小文字全角半角を区別しない
str_ireplaceよりパワーアップしたやつありませんか?
0259nobodyさん2006/11/26(日) 11:28:16ID:???
そこまで来ると正規表現じゃね?
0260nobodyさん2006/11/26(日) 12:03:47ID:???
男は黙って正規表現を書き続けると女の子にもてるよ
0261nobodyさん2006/11/26(日) 12:07:06ID:???
全角アルファベットの大文字小文字ってiオプションで同一視されるっけ?と
実験もせずに聞いてみる
0262nobodyさん2006/11/26(日) 12:20:32ID:???
実験しればわかります。
0263nobodyさん2006/11/26(日) 14:22:23ID:???
Debian GNU/Linux Etch + Apache 2.2.3 + MySQL 5 + PHP 5.1.6
で Web アプリを作っています。諸般の事情により Windows で
動いている SQL Server 2005 内のデータを対象にしたいのですが、
PHP は SQL Server 2005 に接続できますか?その際は ODBC 経由
ということになるのでしょうか?

最悪、SQL Server 2005 内の DB を MySQL に全部吸い出す
覚悟はしているんですが、できれば直接 SQL Server 2005 に
PHP から接続したいと思っています。
0264nobodyさん2006/11/26(日) 14:24:12ID:???
>>263
あなたは、「php SQL Server 2005」と検索窓に入れることもできない
教えてくんなの??
0265nobodyさん2006/11/26(日) 14:54:49ID:???
>>273
ワロタ
0266nobodyさん2006/11/26(日) 15:10:20ID:3LCl7xig
>>273に期待w
02672082006/11/26(日) 15:12:28ID:???
ちょっとつまづきましてお願いします

data.csvファイルを開いて$lineに入れるために

$Data=file("data.csv");
for($i=0;$i<sizeof($Data);$i++){
$line=explode(",", $Data[$i]);
?>

とかいたのですが、
excelからCSVに変換すると 行の最後の「,」が消えてしまいます。
これってなにか防ぐ方法があるのでしょうか?
置換すればいいのですが、変更するたびに消えてしまって困ります。

0268nobodyさん2006/11/26(日) 15:22:16ID:???
phpとどのような関係があるのか10文字以内で述べよ
0269nobodyさん2006/11/26(日) 15:24:13ID:???
普通、行の最後の「,」がないほうがよくね?
0270nobodyさん2006/11/26(日) 15:28:11ID:???
ディープすげー!
0271nobodyさん2006/11/26(日) 15:37:47ID:p7DfmUHL
<input type="checkbox" name="*[]" value="**">***<br>
↑の、name="*[]"の
[]にはどういった意味が含まれているのでしょうか?
0272nobodyさん2006/11/26(日) 15:42:48ID:???
var_dump($*);
してみて。
0273nobodyさん2006/11/26(日) 16:08:39ID:???
有難う御座います!
0274nobodyさん2006/11/26(日) 17:35:08ID:???
$iが0〜10まである場合に、
$hoge['aiueo'][$i] を
$hoge[$i]['aiueo']に簡単に変更する方法ってあるでしょうか?

■ このスレッドは過去ログ倉庫に格納されています