【PHP】下らねぇ質問はここに書き込みやがれ 33
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/11/23(木) 00:27:02ID:???まず読め→【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
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0133nobodyさん
2006/11/24(金) 05:38:48ID:???$h = 'htmlspecialchars';
echo $h('<hoge></hoge>');
0134nobodyさん
2006/11/24(金) 07:42:42ID:???0135nobodyさん
2006/11/24(金) 08:18:37ID:???0136nobodyさん
2006/11/24(金) 09:01:37ID:???0137nobodyさん
2006/11/24(金) 09:37:56ID:???Zend_APIのリファレンスってロハじゃ手に入らんだろ?
0138nobodyさん
2006/11/24(金) 10:32:34ID:???0139nobodyさん
2006/11/24(金) 10:59:39ID:???function h($str) {
$str = htmlspecialchars($str, ENT_QUOTES, 'EUC-JP');
return $str;
}
// http://blog.ohgaki.net/index.php/yohgaki/2006/03/ を参照のこと
0140nobodyさん
2006/11/24(金) 11:20:54ID:???return htmlspecialchars($str, ENT_QUOTES, 'EUC-JP');
でいいような希ガス。
0141nobodyさん
2006/11/24(金) 11:54:47ID:???基本的にインターフェース部分だけ、マニュアルを参照しながら作法通りに書くだけで、あとは普通にCで書くだけだしな。
win上(cygwin)でトライしたときは、コンパイルがうまくいかなくて投げ出した記憶があるが、linux上なら無問題。
0142NAME IS NULL
2006/11/24(金) 12:35:14ID:LYtHrh60[6] => データベース [7] => ユーザー [8] => アプリケーション [9] => アプリケーション [10] =>データベース
[11] => パソコン [12] => カメラ [13] => Java [14] => API)
このように文書中の語句を抜き出し、配列に格納しております。
そして、同じ要素の語句の個数をカウントして、降順に並び替えて
表示したいのですが、どのようにすれば良いでしょうか?
例えば、カメラ 4,ユーザー 2,データベース 2 といった感じにしたいの
ですが。。。
0145142
2006/11/24(金) 13:04:34ID:LYtHrh600147nobodyさん
2006/11/24(金) 14:14:35ID:bDJYivQE画像アップロードが出来る掲示板を作ろうと思っているのですが、
登録→確認→完了
という3つの手順を踏まえるとして、確認画面で画像を表示させたい場合、
一旦サーバに画像を登録しないと駄目ですよね?
しかし、登録しなかったり前に戻ったりする場合、その画像がサーバに蓄積
されていって無駄になります。
どういう構成の方が効率よくできるのでしょうか?
それともPHPの組み方にもよるのでしょうか?アドバイスお願いします。
0148nobodyさん
2006/11/24(金) 14:17:37ID:???「登録」の時に、確認画面用にテンポラリでサーバに保存してるファイルの
タイムスタンプ見ていって古いファイルを削除すればいい
0149nobodyさん
2006/11/24(金) 14:23:37ID:???a,b,c,d,e,f,g
上の例だとfを表示。
どのようにソースを書けばいいのか検討がつきません。
正規表現で置き換えをしようと思いましたが、どのように書けばいいかわかりません。
どなたかわかる方教えていただけませんでしょうか?
0150147
2006/11/24(金) 14:25:35ID:???すみません、いまいち構造の意味が分からないのですが、、、
確認 → クッキーを発行してファイルのパスを保存
登録 → そのクッキーを読んで現在の時間より古ければファイル削除
と言うことですか?
0151nobodyさん
2006/11/24(金) 14:31:40ID:1uBVtpeJなぜか日本語が文字化けして・・・
0152nobodyさん
2006/11/24(金) 14:33:35ID:???$str = "a,b,c,d,e,f,g";
$data = explode(",", $data);
echo $data[5];
0155nobodyさん
2006/11/24(金) 14:39:10ID:???クッキーとかいらね
要は確認までいったらテンポラリディレクトリにファイルを上げる
正常に完了までいった場合はテンポラリから正ディレクトリへ移す
確認でやっぱやめたってなったファイルはテンポラリに残っていく
テンポラリの中で現在より24時間前とかのファイルだったら
明らかに確認途中であきらめて残ったゴミファイルでしょ
その掃除作業を登録→確認→完了のどこかでやればよいということ
0156nobodyさん
2006/11/24(金) 14:41:50ID:???0157147
2006/11/24(金) 14:50:33ID:???「テンポラリディレクトリ」というのは、画像をアップロードするディレクトリと
別のディレクトリを作って、そこにアップするということですよね?
次に確認画面で下のようなソースを書きました。
$time_stmp=mktime();
echo tempnam($file_name,"$time_stmp");
出力画面には
C:\WINDOWS\TEMP\116207.tmp と出ます。(ローカル上でテストしてるので)
あとはTEMP(テンポラリディレクトリ)の中のタイムスタンプ付きファイルを
調べて、IFで指定時刻のタイムスタンプと比較して古いファイルなら
unlinkする処理を組み込めば、OKということでいいでしょうか?
0159147
2006/11/24(金) 16:03:04ID:???0161nobodyさん
2006/11/24(金) 20:49:40ID:???↓
いくつのファイルをアップロードして送信したかを調べる
$max_num=count($test);
echo $max_num;
としても、ファイルが1つでも2つでもフォームを用意した分だけMAX値が求められます。
例えば、<input type="file" name="test[]">を3つ設置したら
かならずMAX値は3になるような。
どうやったら選択したフォームのみの計算が出来るのでしょうか?
0162nobodyさん
2006/11/24(金) 21:56:58ID:???想像で答えるなら、
foreach ($_FILES['test']['error'] as $e) {
if ($e == UPLOAD_ERR_OK) {
$max_num++;
}
}
ってことがしたいってことかな。「フォームの選択」ってとこの意味がよくわからんな
0164nobodyさん
2006/11/24(金) 22:32:33ID:???ロハってなんすか?
>>141
マニュアルがまだ未整備って感じで、結局PHPのソースを見るって感じ・・・
マクロとか、どっちを使えばいいのかわからないものも多いし・・・
まあがんばってみます
0165nobodyさん
2006/11/24(金) 22:44:58ID:???0166nobodyさん
2006/11/25(土) 05:37:25ID:???感じで指摘したら読み間違いは直らないんじゃ、と今更思った
0167nobodyさん
2006/11/25(土) 06:08:17ID:uP/mQvTw0169nobodyさん
2006/11/25(土) 08:04:58ID:???0170スレ専属の回答者
2006/11/25(土) 09:03:10ID:???0172nobodyさん
2006/11/25(土) 12:15:23ID:???出来ないのでしょうか?
class test{
static $a = array();
function add($val = 'aaa'){
$this->a += array('test'=>$val);
print_r($a->layout);
}
}
$test = new test();
$test->add();
$test = new test();
$test->add(5);
0173nobodyさん
2006/11/25(土) 12:22:01ID:???0175nobodyさん
2006/11/25(土) 12:38:54ID:???0176nobodyさん
2006/11/25(土) 12:39:49ID:???0178nobodyさん
2006/11/25(土) 13:08:30ID:???買い物カゴという「モノ」に商品を追加する「手続き」や、追加する個数という「データ」のように
オブジェクト設計としてはどういう扱いなんでしょうか?
0179nobodyさん
2006/11/25(土) 13:10:36ID:???0180nobodyさん
2006/11/25(土) 13:33:04ID:???0181nobodyさん
2006/11/25(土) 13:53:53ID:???<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:???0184nobodyさん
2006/11/25(土) 14:08:47ID:???0185181
2006/11/25(土) 14:08:56ID:???<IfModule sapi_apache2.c>でした…。
0187nobodyさん
2006/11/25(土) 14:18:28ID:???クラス内では共有する値が必要な場合にstaticなプロパティを使えばいい
要はグローバル変数でもいいんだけどクラス内でしか使わないから
クラスに押し込んでしまいたいものに使えばいい
0188nobodyさん
2006/11/25(土) 14:36:37ID:NunClOiBYSTとgoogleは、そのままのHTMLを返してくれるので、splitとeregで何とかなりましたが
MSNは中身の無いものを返してくるので、困っています
スレ違いぽいですが、作ったことある方いらっしゃいませんでしょうか
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]}');");
}
0191188
2006/11/25(土) 15:17:48ID:???お騒がせしました
0193nobodyさん
2006/11/25(土) 15:26:54ID:???すいません。for($i=0; $i<=29; $i++) でしたか?
しかし、なおしても通らないのですが。。。
ほかに原因はあるでしょうか?
0195nobodyさん
2006/11/25(土) 15:33:29ID:???0199nobodyさん
2006/11/25(土) 16:01:23ID:???(word{$i+1})
って何したいのさ?
・根本的にやりたいに対して処理が間違ってる
・SQL文が間違ってる
ソースから読み取れる情報だとこの程度しか答えられんだろ
0200193
2006/11/25(土) 16:06:09ID:???0201nobodyさん
2006/11/25(土) 16:07:31ID:???0202エスパー
2006/11/25(土) 16:09:44ID:???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
0206nobodyさん
2006/11/25(土) 20:29:47ID:???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:???佐藤,サ行,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全てを読みきるのに10秒程度もかかってしまいます。ブラウザからの同内容のPOST
だとすぐに結果が返ってくるのですが、この違いは何によるものでしょうか。
HTTPのトレースを見る限りでは、ブラウザが特別なことをやっているようには見え
ないのですが...
ちなみにfreadで読んでいるのは本体?のhtmlだけで、そのhtmlから張られている
画像などのリンクは読みません。ブラウザは平行に?それらも読んでいるようなの
になぜPHPよりも格段に速いのでしょうか。
0212nobodyさん
2006/11/25(土) 23:39:22ID:???表紙以外見れ無くないですか?
0214211
2006/11/25(土) 23:57:11ID:GT4xD1Nxfreadのループの開始、終了時の時間差が10秒程度なのです。
PHPのfread関数の作りの問題(=改善不可)でしょうか...
0215nobodyさん
2006/11/26(日) 00:01:48ID:???PHP疑う前に自分の環境とコードを疑え
あとその部分のコード貼れ
0216nobodyさん
2006/11/26(日) 00:04:06ID:???定かではないが、昔のバージョンでは遅かった記憶がある。
0217nobodyさん
2006/11/26(日) 00:05:23ID:???0218211
2006/11/26(日) 00:13:22ID:pPg02glY>>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:???バッファ小さくしてみたら
0220nobodyさん
2006/11/26(日) 00:18:16ID:???何したいのかよくわからんが、web鯖が返すレスポンスを取得するんだったら
GETリクエスト投げないとだめだと思うが。
$request にまともなリクエストヘッダ入ってるか?
0221nobodyさん
2006/11/26(日) 00:19:28ID:???0222211
2006/11/26(日) 00:23:22ID:pPg02glYバッファを小さく?それは考えてなかったので試してみます。
>>220
>>221
取得したいページ(html)は全て読めているのですが、
単にループで時間がかかっているのです。ループの前後で
time()の結果を取得して表示してみらたら10秒弱かかって
ました。
0223nobodyさん
2006/11/26(日) 00:25:20ID:???レスポンスの途中で引っかかってるのか
データ受信後に止まってるのかわからんじゃまいか
0224211
2006/11/26(日) 00:31:45ID:pPg02glYprint 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:???だからそれじゃ分からないんだってばよ
各ループでデータは読み出せてるの?
9回から10回で突然6秒停止してるのが非常に気になるけど
0226nobodyさん
2006/11/26(日) 00:43:47ID:???キャッシュが効いてるとか、よほどでかいテキストでDeflateのメリットが出てるとか、
IEが早いケースはありうるけど超考えにくいね。情報不足で何ともいえないけど。
0227nobodyさん
2006/11/26(日) 00:48:24ID:???5.0.4だとそれっぽいのが見当たらないな。
こういうケースはあるみたいだけど。
http://bugs.php.net/bug.php?id=32688
0228nobodyさん
2006/11/26(日) 00:49:01ID:???これのせいで遅くなっているってことはないか?
$response .= fread($socket, 1024*100);
文字列をどんどん連結していくタイプは、文字列が長くなるにつれて劇的に遅くなる。
配列にプッシュしていく方がはるかに高速なので、試してみては?
$chunks = array();
while (! feof($socket)) {
$chunks[] = fread($socket, 1024*100);
}
$response = implode($chunks);
0229211
2006/11/26(日) 00:53:05ID:pPg02glYループ内のprintで、その時点での全受信データ長も出力してみました。
1164469801
1164469802-->556
1164469802-->4703
1164469802-->8818
1164469802-->12578
1164469802-->16963
1164469802-->20723
1164469802-->28859
1164469808-->28859
1164469808
6秒かかってるのにデータ長が変ってない???
0231nobodyさん
2006/11/26(日) 00:59:53ID:???HTTP1.1でリクエストしてるのに、Closeしてないときとか。
0232nobodyさん
2006/11/26(日) 01:03:02ID:???■ このスレッドは過去ログ倉庫に格納されています