【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
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0331nobodyさん
2006/11/27(月) 23:26:35ID:???http://aucfan.com/know-how/help_4_2.htm
↑ここ見ると、Yahooのデータは、検索される都度Yahooにクエリ投げて結果を受け取ってるだけのようだ。
出品データをいちいち毎日オークファンのDBに取り込んでるわけじゃない。
そりゃそうだわな。そんなことしてたらYahoo側からアク禁食らうだろうし。
0333nobodyさん
2006/11/27(月) 23:47:28ID:???「とりあえず10000個ディレクトリ作って、lsやってみろ」と、
うちのひいばあちゃんが言ってたよ。
0334nobodyさん
2006/11/28(火) 00:29:51ID:???とも言ってたな。
0336nobodyさん
2006/11/28(火) 00:35:48ID:???なんて、言ってる奴にはどうせろくなサイトはできないから
無視していいんじゃね。
0337nobodyさん
2006/11/28(火) 00:36:04ID:???lsのコストなんてどうでもいい
0338nobodyさん
2006/11/28(火) 01:11:22ID:???0339nobodyさん
2006/11/28(火) 02:04:37ID:???0340nobodyさん
2006/11/28(火) 03:13:34ID:???なんでlsのコストの話してるんだ?と思うが、どうしてもWinでls使いたいなら
っ GnuWin32 Gygwin VMware coLinux ...etc
まぁあれだ、ディレクトリ10000個作ったりするような設計をやった事がないから、どの程度遅くなるのか分からん。
実稼働環境に近い条件を用意して、実際に動作テストやるべきだな。
0341nobodyさん
2006/11/28(火) 07:25:30ID:???そりゃどっちも同じくらい遅い。
ファイルシステムのindexデータにとっては
ディレクトリも特殊な属性を持ったファイル相当なので、
ディレクトリ+ファイルの合計で数が多くなると遅いです。
ディレクトリを階層構造にはできないの?
0342nobodyさん
2006/11/28(火) 07:29:57ID:???0343nobodyさん
2006/11/28(火) 07:37:57ID:???ファイルの持ち方を参考にするとか、簡単なAPで検討してみるしかない。
>>337
おまえ何もわかっていない
0344nobodyさん
2006/11/28(火) 08:50:39ID:???求人サイトなどでよくあるのですが、1つの項目に複数個入れる時、
配列を使って「AAA BBB CCC」とするのがいいのでしょうか?
それとも「AAA,BBB,CCC」っと1つずつカンマ区切りの方がいいのでしょうか?
データーベースやテキストでログを保存する場合も
1つのフィールドに対して1つの配列内のデータを入れるのか、
それとも配列にせずに、3つなら3つのフィールドを用意して入れた方が良いのか
どちらの方が汎用性・効率化の面で優位なのか悩んでいます。
0346344
2006/11/28(火) 09:07:48ID:???例えば以下のような登録フォームがあるとします
趣味は?:[]パソコン[]野球[]サッカー
※[]はチェックボックスとします。
こういうフォームの場合、ログとしてテキスト、もしくはDBに保存する場合
どのような形で保存する方が汎用性が高いのかな?と思いまして。
質問が「趣味は?」だけならいいのですが、「その趣味に使う時間は?」
など追加した場合も、チェックを入れた項目毎の時間を入力出来るような。
0348nobodyさん
2006/11/28(火) 09:22:49ID:???手早く作るにはこれ
処理の早さならDB・テキストに関わらずビットフラグ
汎用性ならDBだが、>>344の場合テーブル設計つーかリレーションについて
勉強が必要だと思われ
データ構造はどういう操作を楽にしたいか、という観点から設計されるので
漠然とどういうのが効率的か、汎用性が高いか、というのはない
要求をしぼったほうがいいと思う
0350344
2006/11/28(火) 09:41:27ID:???おっしゃる通りです。まさに悩んでいるのはその点です。
テーブル設計やリレーションについて、いまいちまとまらないんです。
だから設問が追加した場合、汎用性が聞かなくなることが多く、
結局、フォームを追加したり、作り直すことが多いんです。
ただ、勉強するにも何をどう学べばいいか悩みます。
参考書に書いているような事でもないし・・。
0352nobodyさん
2006/11/28(火) 10:39:26ID:ms9bthGt変数に入れた文字列を、先頭から1文字ずつ順に取り出したい場合、どのような関数
がありましたでしょうか?
ファイルに書き出さない方法がありましたら、教えてください。
よろしくおねがいします。
0353nobodyさん
2006/11/28(火) 10:46:25ID:???substrとか。
String系の関数を眺めてみればもっといいのがあるかもね。
ttp://jp.php.net/manual/ja/ref.strings.php
よくできた日本語マニュアルがあるんだから読んでみては。
0354nobodyさん
2006/11/28(火) 10:50:38ID:???utf8にしてpreg_splitつー手もある
0355nobodyさん
2006/11/28(火) 10:51:44ID:???windowsを前提で話す。
1.変数が記述されたphpファイルをメモ帳で開く。
2.変数の行にカーソルを持っていく。
3.変数に格納された文字列をコピー。
4.コピーした文字列を別のファイルにペースト。
5.あとはお好きなように
0356nobodyさん
2006/11/28(火) 11:11:15ID:???↑こういうURLがあるんですけど、?Helloはどうやって取得したらいいのでしょうか?
$_GETじゃ取得できませんでした。
0357nobodyさん
2006/11/28(火) 11:11:35ID:MVyDbxlOsubstrの存在を忘れてました…
助かりました!ありがとうございます。
>>354
今回は半角英数字しか使う予定はないので、その問題は大丈夫っぽいです。
マルチバイト使うときは、気をつけます。
ありがとうございます。
0358nobodyさん
2006/11/28(火) 11:12:40ID:???$s = "hogehogebar";
$l = strlen($s);
for ($i=0; $i<$l; $i++) {
echo $s{$i};
}
でええやん
0359nobodyさん
2006/11/28(火) 11:12:53ID:XGgokU8Xそういう方法もありますね、今回は直接入力された変数から行うので、残念ながら使えませんが、
その方法も覚えておきます。
ありがとうございます。
0360358
2006/11/28(火) 11:16:05ID:???echo $s[$i]; でアクセス
0361nobodyさん
2006/11/28(火) 11:22:10ID:???array_keys($_GET);でhelloだけ取れると思うけどキーだけとってどうすんの?
フラグにしたいなら isset($_GET['hello']) で判定可能
0362QQQ
2006/11/28(火) 11:33:10ID:trk6Ybn1それぞれのボタンで入力に対して異なる処理をさせたいんですが、
どうやったらできますか?
現状ソースは以下
<INPUT TYPE="text" NAME="var" SIZE="20">
<FORM ACTION="http://localhost/search1.php" METHOD=POST>
<INPUT TYPE="submit" VALUE="実行1">
</FORM>
<FORM ACTION="http://localhost/search2.php" METHOD=POST>
<INPUT TYPE="submit" VALUE="実行2">
</FORM>
元々、一行目の文を<form>の中に入れてました。ボタンを二つに
したかったので外に出しちゃいましたwこれでは値が渡されません。
あ、これPHPファイルをコールする直前のHTML内の処理ですね。
でもできれば回答お願いします。
0363nobodyさん
2006/11/28(火) 11:38:35ID:XGgokU8Xそんな方法があったんですね…
勉強不足でした。
早速試してみます。
ありがとうございます
0365nobodyさん
2006/11/28(火) 12:38:18ID:???0367nobodyさん
2006/11/28(火) 13:40:05ID:???0368nobodyさん
2006/11/28(火) 14:46:43ID:9CSKXruBif($_SERVER['REQUEST_METHOD']=="POST"){
if(get_magic_quotes_gpc()){
$_POST["name"] = stripslashes($_POST["name"]); //フォームの数だけ用意
}
//改行を<br>にする
$_POST["comment"] = str_replace("\n", "<br>", stripslashes($_POST["comment"]));
//POSTを変数にする
$name=$_POST["name"]; //フォームの数だけ用意
}
上記のような記述を書いているのですが、やはり必ず書くようにした方がいいですよね?
フォームの数が多いとかなり長くなり、めんどくさいのですが、、
それでもセキュリティ的に必要だと思うし…みなさんはどうしているのでしょうか?
0369nobodyさん
2006/11/28(火) 14:50:10ID:???0372nobodyさん
2006/11/28(火) 14:56:26ID:???どんだけ馬鹿なんだよw
0376nobodyさん
2006/11/28(火) 15:18:35ID:???0377nobodyさん
2006/11/28(火) 15:25:47ID:???とりあえずここ熟読してから来て
0378nobodyさん
2006/11/28(火) 15:53:05ID:q3z6QRVX取り出すには何を使えば良いのか
0379nobodyさん
2006/11/28(火) 16:06:02ID:AFqLXmTZphpが自動でURLデコードをしていてそれが失敗しているために
日本語文字列が化けてしまうのですが、
(インプットアウトプット内部全部EUC-JPでまとめてるからconvert要らないはずなのに・・・)
自動デコードをさせない設定等があれば教えて下さい。
0381nobodyさん
2006/11/28(火) 16:19:05ID:q3z6QRVX便利な方法おお願いします
0384nobodyさん
2006/11/28(火) 16:37:15ID:???0386nobodyさん
2006/11/28(火) 17:09:32ID:???function get_array_by_len(array $array, $len = 10)
{
$result = array();
$array = new ArrayIterator($array);
for ($array->rewind(); $array->valid(); $array->next())
{
if ((mb_strlen($array->current()) >= $len))
{
$result[] = $array->current();
}
}
return $result;
}
0387nobodyさん
2006/11/28(火) 18:12:01ID:???何も定義していなのにPragma: no-cacheと過去を指定したExpiresがhttpヘッダに
送信されているようです。
Expiresは未来の日時へ上書きするとしてPragma: no-cacheを出力させないようにするには
どのようにすればよいのでしょうか。
header
headers_ list
headers_ sent
のリファレンスは見ましたが解決に至りませんでした。
0388nobodyさん
2006/11/28(火) 18:35:15ID:???ヘッダは、PHPのじゃなくてWebサーバーが出力してる に一票。
出力させない方法は俺は知らないが、Expiresを上書きできるなら
Pragmaも適当な意味のない値で上書きすれば良いのでは。
//ちなみにレスポンスの Pragma: no-cache はHTTP/1.0の規格外
0390nobodyさん
2006/11/28(火) 18:46:40ID:???0391378
2006/11/28(火) 18:59:03ID:lLFQbN4A$str = <<<EOM
俺の親父はガッツ石松だぜ。getsじゃ無いよGUTSだよ。
EOM;
mb_internal_encoding("SJIS");
mb_regex_encoding("SJIS");
$token = array();
while(1){
$bytes = mb_ereg("[一-龠]+|[ァ-ヴー]+|[a-zA-Z]+", $str, $match);
if ($bytes == FALSE) {
break;
} else {
$match = $match[0];
array_push($token, $match);
}
$pos = strpos($str, $match);
$str = substr($str, $pos+$bytes);
}
print_r($token);
↑これを
2文字以上のものだけ取り出したいのです。
ようは俺とか無とかの1文字のものは
表示させないようにしたい
0392387
2006/11/28(火) 19:01:35ID:???出力する文字列の<head>〜</head>から読み取って勝手にapacheが
HTTPヘッダを出力してしまうことがありますね。
試しに「<?php phpinfo(); ?>」と書いたスクリプトから出力されている
ヘッダを確認したところPragma: no-cacheは出力されていませんでした。
PHPで出力されるヘッダを確認するheaders_list関数があるのですが
PHP5からの実装で開発環境はPHP4のため利用することが出来ませんでした。
Pragmaを空文字にしたりcacheにしたけどキャッシュされませんでした。
0393nobodyさん
2006/11/28(火) 19:08:39ID:???0394nobodyさん
2006/11/28(火) 19:19:03ID:???linux でサーバ動かしてますけど、コマンドラインからもphpを動かして簡単な処理をさせたいと思います。
どうすれば良いのでしょうか?
よろしくです。m( _ _;)m
0395nobodyさん
2006/11/28(火) 19:20:05ID:???0399394
2006/11/28(火) 20:06:26ID:???php4.3.10なので標準で--enable-cliになるはずですが・・・(phpinfo()を見ても無い・・・)
ちなみにwindows機ではphpのフォルダの下にcliフォルダがあり、ここにphp.exeが入っていますのでコマンドラインから可能です。
debianでapt-getでphp4を入れるとcli版が入らないのでしょうか???
0400nobodyさん
2006/11/28(火) 20:07:40ID:???0401394
2006/11/28(火) 20:08:42ID:???0402nobodyさん
2006/11/28(火) 20:11:13ID:???$ php -v
PHP 5.2.0 with Suhosin-Patch 0.9.6.2 (cli) (built: Nov 27 2006 01:55:31)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
0403nobodyさん
2006/11/28(火) 20:14:02ID:???bash: php: command not found
になっちゃいますが・・・
0404nobodyさん
2006/11/28(火) 20:26:02ID:???KURO-BOX login: tmp-kun
Password:ないしょ
Last login: Tue Nov 28 20:13:09 2006 from 192.168.1.2 on pts/0
Linux KURO-BOX 2.6.16-kuroboxHG #1 Sun Oct 29 21:27:07 JST 2006 ppc GNU/Linux
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
tmp-kun@KURO-BOX:~$ php -v
-bash: php: command not found
tmp-kun@KURO-BOX:~$ su root
Password:ないしょ
KURO-BOX:/home/tmp-kun# php -v
bash: php: command not found
です。
やっぱ、cli版は別にインスコするんでしょうか?
0405nobodyさん
2006/11/28(火) 20:51:33ID:???0406nobodyさん
2006/11/28(火) 20:54:35ID:???バイナリがあるならパス通したり
0407394
2006/11/28(火) 20:56:14ID:???これかなぁ・・・やっぱ、cli版は別にインストールするみたいですね。
いきなり実行するのも怖いので、HDD丸ごとバックアップ取ってからやってみます。
どうもでした。
http://qoon.jp/2006/06/php.html
PHPのCLI版のインストール(Debianの場合)
$su root
#apt-get update
#apt-get upgrade
#apt-get install php-cli
そのまま通常のphp.iniをコピー(念のためバックアップ)
#cp /etc/php4/cli/php.ini /etc/php4/cli/php.ini.back
#cp /etc/php4/apache/php.ini /etc/php4/cli/php.ini
0408nobodyさん
2006/11/28(火) 21:22:24ID:???どうもです。
そうだったんですか・・・
窓の方では何もしなくてもphp.exe.が入っていましたし、「php4.3.0以降は
自動的に設定される」ようなことをどこかで目にしていたものですから・・・
なんで動かないのか、半日悩んでおりました。(苦笑
お騒がせしました。。。m( _ _;)m
0409nobodyさん
2006/11/28(火) 21:23:29ID:???文字コードでのエンコードをした方がいんですか?
0410387
2006/11/28(火) 21:52:06ID:???php.iniやheader_cache_flag(1)みたいな関数があるのか探していたのですが
>>395さんの仰るとおりsession.cache_limiterが原因であることが判明しました。
ありがとうございました。
0411nobodyさん
2006/11/28(火) 22:34:12ID:???おみやげにこれあげるんで
//URLからドメイン名を取得する
$pattern = "/^(http:\/\/)([^\/]+)(\/.*$)/i";
preg_match ( $pattern, $url, $match );
$domain = $match[2]; //ドメイン
$path = $match[3]; //パス
0412sage
2006/11/28(火) 22:41:38ID:TqHCzfuA変数を受け渡す際にPATH_INFOを使用してスラッシュ区切りで渡しているのですが、
変数を何も渡さない時に
Notice: Undefined index: PATH_INFO
というエラーが出てしまいます。
URLが
http://localhost/index.php
の場合にエラーとなり
http://localhost/index.php/
のように、最後にスラッシュをつけるとエラーが出ません。
お知恵を拝借できればと思います。よろしくお願いします。
0413nobodyさん
2006/11/28(火) 22:47:26ID:???php の セッションIDは、マイクロ秒単位の現在時刻 + ユーザーのリモートアドレス + combined-LCG(線形合同法自体は、疑似乱数生成方法としてはセキュアな方法ではない。) が種となっている。
セキュリティの専門家の高木浩光氏も 「phpらしい駄目っぷりだ。」 と批判している。
Unix 系 の OS ならば php.ini などで /dev/urandom を乱数の種に使うように設定しよう。
次のように記述すれば良い。
| session.entropy_file = /dev/urandom
| session.entropy_length = 16
/dev/urandom では、周囲で発生するノイズ等の攻撃者に推測されない値をデバイスドライバや他の情報源から収集して、乱数の種として使用する。
これは、特殊なハードウェアが無い普通のPCでも使えて大変便利。
HDDの回転数、CPUの温度、ハードウェアの温度、マウスの動き、HDDの寿命、ハードウェアのエラーセクタ、HDDのSMART情報、周囲のノイズによる
ハードウェア内部エラーなど、PCにはセキュアな擬似乱数としての使用に耐える攻撃者に推測されない値がいっぱいそなわっているのだ。
参考:
http://tdiary.ishinao.net/20061120.html#p01
http://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/random-numbers.html
0414nobodyさん
2006/11/28(火) 22:59:18ID:???391は見る気しないけどURLからドメインを抜く関数ってありますよ
>>412
issetで調べてね
>>413
前から知ってたけど作るもののレベルによるのではないかと限りなく唯一無二なら問題なし
0415nobodyさん
2006/11/28(火) 23:24:20ID:???ブラウザにキャッシュさせたくない時に
cache-control, pragma, expire
のヘッダ発行したら出来たと思うのですが・・・・。
IE6とFirefoxで動作確認したところキャッシュされまくりでした!!
IE6で何か変ったんでしょうか?IE6でもキャッシュ無効出来てる人いますか?
0416nobodyさん
2006/11/28(火) 23:26:47ID:???それともキャッシュされちゃ困るほどセキュアな情報なの?
Webアプリ屋も少しはHTTPを勉強して欲しい。
0417nobodyさん
2006/11/28(火) 23:29:21ID:QkZ3aa/DMySQL(MySQL - 5.1.11-beta) の文字セットがUTF-8 Unicode (utf8) ということで
データベースに入れたものをEUC-JPで表示しようとすると文字化けしてしまうようです。
他のサーバーでEUC-JPにて構築したサイトでして
これからUTF-8に移行するには非常に手間がかかります
どうにか簡単に解決する方法はありませんでしょうか?
よろしくお願いいたします
0418nobodyさん
2006/11/28(火) 23:33:39ID:???0419nobodyさん
2006/11/28(火) 23:35:03ID:???データベースに入ってるのがUTF-8で、表示するときEUC-JPにしたいなら
表示するときに変換すればいいのでは?
そのサーバーのPHPスクリプトの表示する部分だけちょちょいと書き換えればOK。
0420nobodyさん
2006/11/28(火) 23:43:19ID:QkZ3aa/D了解しましたー
どうでもです。
しかし、mb関数が使えないとかなるとおそらく面倒なんでしょうかね?
0422nobodyさん
2006/11/29(水) 00:58:36ID:???PEARのソースって綺麗ですか?
適当なものをダウンロードしてソースを見たら、
思っていたのとだいぶ違っていました。
見た感じ手続き型でしたし、
文法的にも動作的にも問題はないですがちょっと違和感がある、
書き方をしている箇所があったりと。(自分本位の視点なので自分がおかしいのかも)
とりあえずPEARのソースは参考になると思いますか?
それとも国産フレームワークのソースでも見たほうがいいでしょうか?
0425nobodyさん
2006/11/29(水) 01:51:50ID:???PHP以外の言語だったら>>387のような問題が発生することは無い。
0426nobodyさん
2006/11/29(水) 01:52:49ID:???HTTPの意味はわかるが、何を勉強すればいいんだ?
0427nobodyさん
2006/11/29(水) 01:57:53ID:???>PHP以外の言語だったら>>387のような問題が発生することは無い。
んなことねぇよボケ。
Cやっててネットワークの知識がないヤツだってたくさんいる。
0428nobodyさん
2006/11/29(水) 02:02:11ID:???そんなことを気にしてるほうがダメ人間だと思う。
PHPのセッションID生成方法について、ヲタ的には乱数がどうのこうので
ケチをつけたくなるのかもしれんが、現実的には十分に推測不可能だろ、それで。
0429nobodyさん
2006/11/29(水) 02:22:55ID:???ログの読み取り方について質問です。
file()でログを読み込んで、
それをリクエストがあるたびに毎回読み込んでhtmlに反映してるのですが、
当然ログが長くなるとレスポンスが悪くなりますよね?
そこでログに変更があった後、
htmlを更新し出力しなおすみたいなことをしたいのですが、
技術的に難しいでしょうか?
0430429
2006/11/29(水) 02:38:45ID:???言ってることがよくわかりませんね。
自分でもわからなくなってしまいましたorz
色々と試行錯誤してみることにします。
お騒がせしてすみません。
■ このスレッドは過去ログ倉庫に格納されています