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

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

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

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

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

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0482nobodyさん2008/03/30(日) 04:50:10ID:???
>>480
>>478は、見直してみろって言っているが、暗に自作関数は要らないと言っていると思うんだが。
後半は、同意。

>>481
3ヶ月どころか、3年を通り越して7年もやっているんだが。phpだけじゃないが。
0483nobodyさん2008/03/30(日) 04:56:45ID:???
>>482
とてもそうは見えないですよ。本当のところは3週間くらいかと思った。そもそも国語力が足りないんじゃないですか?

0484nobodyさん2008/03/30(日) 05:04:06ID:???
>>483
意味分からん。
phpはビルトイン関数が多いから、自作関数を作るのはビルトイン関数を
把握しきれていない証拠だといいたいのか?

ビルトイン関数はユーティリティー関係が充実しているのは確かだが、
それだけではシステムは組めない。
業務クラスを実装していけば、複数の業務で共通する処理を業務共通クラスとして外だしにすることもよくあること。

もっと、勉強してこい。
0485nobodyさん2008/03/30(日) 06:34:08ID:???
>>484はプログラミング初心者ではないと思うが、日本語初心者だろうとは思う
0486nobodyさん2008/03/30(日) 06:34:28ID:???
>>483
>>478は自作関数は要らない ではなく、関数化する必要が在る・無いを見極める事が必要って言っていると思う

関数化は作る時の作業効率だけではなく、他人が後からトレースする時の効率も考える必要があると思う
スパゲティコードもトレースに時間がかかるけど、関数だらけのもトレースに時間がかかる
自作関数の中にまた自作関数があって、その中に自作関数があって、やっている事は数行で1度しか呼び出しされない
とか…それが解るのはそのファイル内の処理を全てトレースして理解してからなんだよね
関数化やライブラリ化するのかそのバランスを見極める必要はあると思う
0487nobodyさん2008/03/30(日) 09:29:29ID:oSilb2mW
パスワードをハッシュで保存して、パスワードが入力されたらハッシュ化して比較しようと思っています。
ハッシュ文字列が長いので、ログのサイズカット目的で、
substrで7文字程度にカットしようと思うのですが、これで行った比較は正確なものと言えるでしょうか?
0488nobodyさん2008/03/30(日) 09:41:35ID:???
部分だけの比較でなんで正確だと思うんだ。
0489nobodyさん2008/03/30(日) 10:15:54ID:???
>>477
自分は単なる関数でもクラスのstaticメソッドにして整理してる。

>>487
正確はどうかは、ここで言う「正確」という言葉の定義による。
ログの目的にもよるけど、ログ出力するときだけカットするようにしたら?
0490nobodyさん2008/03/30(日) 10:24:41ID:???
数万文字程度なら黙って全部MD5にぶちこめ
0491nobodyさん2008/03/30(日) 10:32:48ID:???
>>490
md5で生成された32バイトの文字列が長いということではないの?
04924872008/03/30(日) 11:00:37ID:???
レスありがとうございます

>>488
言われてみればそうですね。ほぼ正確という言葉が正しかったですね。

フォーラムを作っていてトピックや発言を消せるようにパスワードをつけています。
DBを用いずテキストにログを保存しているため、ログが蓄積するとDBに比べ速度が遅くなります。
少しでも読み込む文字列を少なくするために、保存する時にハッシュ化したパスワードをカットしようと思った次第です。
アルゴリズムはビット長の長いwhirlpoolを使っています。

妥協して安全性には少し難がありますが、ビット長の短いものに変更したいと思います。
0493nobodyさん2008/03/30(日) 12:48:20ID:???
>>463
はい、マニュアルどうぞ
http://www.php.net/manual/ja/types.comparisons.php
0494nobodyさん2008/03/30(日) 18:18:33ID:???
$_SERVER["HTTP_CONNECTION"] って普通のブラウザ(携帯除く)なら必ず Keep-Alive になるのでしょうか?
スパムを防ぐのにこれを入れておくと、どういう不都合が考えられますか?
0495nobodyさん2008/03/30(日) 19:14:15ID:pBE7+GD1
すでに存在する関数「db_get」というのが読み込まれているのですが、それを無効化して、あらたに「db_get」という関数を定義することはできるのでしょうか?
他のファイルで旧「db_get」を使用しているため、古いのは残したまま、別のPHPでは新しいdb_getを実行したいのです。
なお読み込みは全て共通ファイルで読み込んでいるので、新しいPHPでも古いdb_getは読み込まれています。
やはり新しいほうを別の名前にするしかないでしょうか?
0496nobodyさん2008/03/30(日) 20:25:54ID:LU6QHGFg
iniファイルで文字を取得して出力しているのですが、
伸ばし棒のところで文字化けしてしまいます。
どうしたらいいでしょうか?
0497nobodyさん2008/03/30(日) 20:30:28ID:???
>>495
名前空間使えばできるけど現状では無理。
プレフィックスつけるかクラスに閉じ込めるのが現実的かと。
>>496
コード見せて。
0498nobodyさん2008/03/30(日) 20:37:26ID:LU6QHGFg
class page{
private $ini = "";
public function __construct(){
$this->ini = parse_ini_file("PHPdefine.ini");
}
public function vewheader(){
print $this->ini["bbs_title"];
}
}

↓PHPdefine.ini
bbs_title=アー
0499nobodyさん2008/03/30(日) 20:58:40ID:???
>>498
shift-jisやめれ
0500nobodyさん2008/03/30(日) 21:46:48ID:???
ばーかばーか
0501nobodyさん2008/03/30(日) 22:07:04ID:???
EUCかUTF-8あたりで保存するんだ。
0502nobodyさん2008/03/31(月) 00:21:19ID:???
ディレクトリにあるファイル数を確認し、0000x.incというファイル名前をキーに
降順で読み込む。また、10件以上有る場合は次ページ以降を作ってそちらに読み込む。

こんな感じのことできますか?
0503nobodyさん2008/03/31(月) 00:43:38ID:???
>>502
「0000x.incというファイル名前をキーに」
というところが意味分からん、何のキー?
0504nobodyさん2008/03/31(月) 01:00:09ID:???
>>502
「…ファイル数を確認し、」以降が全くわからん。

・あるディレクトリ内のファイル数を確認したい。
・ファイル名は "連番.inc" にしてある。ファイル名で降順ソートしたい。
・ソート後、ひとつずつファイルを読み込んで1件/1ファイルとして出力したい。
・最大10件/ページになるようにしたい(ので、ファイル数を確認した)。

自分のエスパーカではこれぐらいが限度だ。
0505nobodyさん2008/03/31(月) 01:13:18ID:???
>>503
そうですね。書いてても分かりませんでした。

>>504さんのおっしゃるとおりです!ビックリエスパーですorz

連番.incファイルを読み込みたいんです。
その内容はただのtableタグで書かれた表なんですが、データベースとか使えない
サーバーで、それ以前の問題の気もしますが。

・連番の数の大きいほうが、新しいファイルなので降順にしたい
・一つのページに表は10個読み込みたい。
・10個以上ある場合、次のページにいくようにしたい。

以上のことがしたいんだと思います。
0506nobodyさん2008/03/31(月) 01:20:16ID:???
ひとまず質問するならID出そうな、>>1読んでね
で、出来るかどうかなら「出来る」
0507nobodyさん2008/03/31(月) 02:25:45ID:???
プログラムの能力よりもコミュニケーション能力が如何に大切かがようやく分かったような気がする。
0508nobodyさん2008/03/31(月) 04:13:28ID:???
system()で
対話形式、たとえば、ssh でパスワード入力したいんだけど、
良い方法ないでしょうか。
単純に
system("ssh -phogehoge localhost")
としちゃうとパスワードがローカルユーザーに漏れてしまう可能性があるので。
05094952008/03/31(月) 08:55:13ID:aabaHexl
>>497
そうなんですか……
おとなしく接頭語をつけることにします。
ありがとうございました。
0510nobodyさん2008/03/31(月) 09:47:51ID:???
ttp://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/003.html
0511nobodyさん2008/03/31(月) 09:52:46ID:???
>>508
そういう場合、一般的には expect スクリプトを用意するんだけど、
sshだったらホストベースのRSA認証でログインするのがいいんじゃない?
とはいえ、信用できないユーザがいるホストからスクリプトでログインしたいとはなかなか豪快な話。
0512nobodyさん2008/03/31(月) 11:20:40ID:zaGfhvtn
>>505
方法は二つ
・各ファイルの情報を持つ親ファイルを作る。
・ファイル名を工夫する。ハイフォン等を用いてファイル番号と行数をファイル名とする。
0513nobodyさん2008/03/31(月) 11:40:30ID:???
ハイフォン(笑)
0514nobodyさん2008/03/31(月) 13:23:58ID:???
>>495
http://jp.php.net/manual/ja/function.runkit-function-redefine.php
とか使えばできる
ただこれは標準関数じゃないので
peclからインスコが必要
0515nobodyさん2008/03/31(月) 13:25:46ID:D840Cc+c
iniファイルの値を配列として取得することは出来ないでしょうか?
0516nobodyさん2008/03/31(月) 13:29:03ID:???
>>515
parse_ini_file
0517nobodyさん2008/03/31(月) 13:30:35ID:???
>>514
指定したクラスに新しいメソッドを動的に追加することもできるんだ。
前そんな話が出てたと思うけど便利だね。
0518nobodyさん2008/03/31(月) 13:46:22ID:D840Cc+c
>>516
parse_ini_fileの場合は連想配列で取得ですよね?
連想配列ではなくて、通常の配列で取得する方法を探しているのですけど
0519nobodyさん2008/03/31(月) 13:59:27ID:???
じゃあarray_values(parse_ini_file($filename))
0520nobodyさん2008/03/31(月) 14:37:58ID:???
>>518
教えてもらうほうが偉そうってすごいよなw
最近は質問系サイトの影響かと思っているが
0521nobodyさん2008/03/31(月) 14:40:30ID:???
質問スレは、質問者で成り立っているんだから、
ある程度傲慢でもしょうがないんじゃないの。

そんなことに、いちいち突っ込む奴がどうかと・・・
0522nobodyさん2008/03/31(月) 14:52:28ID:???
成り立ってるのはお互い様だろ
0523nobodyさん2008/03/31(月) 15:12:31ID:???
>>521
おいおい何言ってんだ。回答者で成り立ってんだよお前知障か。
質問者なんていなくとも誰も困らん。
0524nobodyさん2008/03/31(月) 15:19:28ID:???
>>523
両方だろ。馬鹿レスしていると、お前のチンチンちょん切るよ!
0525nobodyさん2008/03/31(月) 15:32:30ID:???
質問者以外はお帰りください(笑)
0526nobodyさん2008/03/31(月) 15:41:29ID:???
>>518
で,その問題はそれで解決したのか?
0527nobodyさん2008/03/31(月) 15:45:56ID:???
尋ねる人と答える人以外は必要ないしな。
茶々入れる人は最優先でいらない人。
0528nobodyさん2008/03/31(月) 16:03:28ID:???
華麗にスルー
0529nobodyさん2008/03/31(月) 16:43:15ID:???
ばーかばーか
0530nobodyさん2008/03/31(月) 17:48:52ID:bWUoRvpM
echo date("m",strtotime("+1 month"));

としたら、04ではなく、05になります。
今はまだ3月なので4になるはずなのですが、どうしてでしょうか?
0531nobodyさん2008/03/31(月) 17:58:54ID:???
>>530
04月には31日がないからPHPさんも困ったんじゃないかな
05325302008/03/31(月) 18:06:52ID:bWUoRvpM
>>531
この書き方の場合、「月だけ+1して表示」することは出来ないのでしょうか?
どういう風な書き方をするのがベストなのでしょうか?
0533nobodyさん2008/03/31(月) 18:11:58ID:???
mktime
05345312008/03/31(月) 18:16:30ID:???
>>532
> 「月だけ+1して表示」
それをそのまま書くとか

echo date("m") + 1; // string + 1 が気持ち悪ければ (int) するなり何なり
0535nobodyさん2008/03/31(月) 18:18:58ID:???
年の瀬で涙目
05365312008/03/31(月) 18:20:45ID:???
ですよね
0537nobodyさん2008/03/31(月) 18:29:17ID:???
12より大きけりゃなんたらって処理入れるだろ普通w
05385302008/03/31(月) 18:33:57ID:bWUoRvpM
>>534-537
みなさん、ありがとうございます。
それでは以下のようなコードを書いてみましたが、いかがでしょうか?

// 次の月にまたぐ場合
if(date("j")>=abs($_POST["day"])){
$month = date("m")+1;

// 12より大きい場合
if($month > "12"){
$year = date("Y",strtotime("+1 year"));
$month = "01";
}else{
$year = date("Y");
}
}else{
$month = date("m");
$year = date("Y");
}
0539nobodyさん2008/03/31(月) 18:37:28ID:NIwRaO2m
redhat 7.3 + rpm 標準付属の php-4.1.2 を使っています。

APC とか、MMCache とか、ionCube とか、e-accelerator とか、
スクリプトキャッシュを入れたいんだけど、
rpm を使って簡単に導入できるものってある?

DAG とかで公開されてる rpm は、fedora core 2 以降がほとんどで、
redhat 7.3 みたいな古代遺跡には対応してくれてないみたいなんだよね。。。
0540nobodyさん2008/03/31(月) 18:39:32ID:???
いかかですか?って、アホだなぁという感想しか
0541nobodyさん2008/03/31(月) 18:56:58ID:???
>>538
ググッた結果mktimeで一日とかのタイムスタンプを作ったほうが楽そう
0542nobodyさん2008/03/31(月) 19:13:13ID:???
12の剰余をとるほうが楽じゃね?
0543nobodyさん2008/03/31(月) 19:23:19ID:???
>>538
初っ端から違和感があるけどPOSTされるデータがよく分からないから黙っておく
$month = date("m")+1;とすると03が4になっちゃうんじゃないかな

年月日までの精度でいいなら単純なint値として扱って
出力時に整形するほうが楽で安全だと思うよ

個人的にはgetdate()で作った配列をバラして使うのが好き
0544nobodyさん2008/03/31(月) 19:33:15ID:???
PHPでこの先生きのこれますか?
0545nobodyさん2008/03/31(月) 19:42:39ID:???
きのこるって書きたいだけの人よりは。
0546nobodyさん2008/03/31(月) 20:06:02ID:???
先のことなど日曜プログラマが気にすることはないよ
0547nobodyさん2008/03/31(月) 20:27:31ID:???
プロでも日曜プログラマに適わないのも居るがなw
0548nobodyさん2008/03/31(月) 20:51:28ID:???
業務で使わないなら気にすることはないって言ってるんだろうに
敵う敵わないとか関係ないだろ
0549nobodyさん2008/03/31(月) 21:30:46ID:???
PHPで生き残れるかは本人しだいだけど、PHPが生き残るかは・・・
5年後には今のN88-BASIC並に廃れてたりちて。
0550nobodyさん2008/03/31(月) 22:40:55ID:???
「どの言語で作るか?」
よりも
「何を作るか?」

が、重要だと思いますです。
0551nobodyさん2008/03/31(月) 22:51:49ID:???
「どうやって作るか?」が重要だと思いますです
0552nobodyさん2008/03/31(月) 23:05:10ID:???
ソースがめちゃくちゃ汚かったとしても
目的を達成する物が出来たら良いと思いますです。
0553nobodyさん2008/03/31(月) 23:16:49ID:???
いや良くねぇよw
0554nobodyさん2008/03/31(月) 23:28:28ID:???
一人ならいいかもね
複数でやるには汚いと効率悪い
さらに無駄に処理が重いなら良くは無いかも
0555nobodyさん2008/03/31(月) 23:42:08ID:???
でも、「効率がよい」って定義も難しくない?

例えば効率が良いと思ってフレームワーク使っても
結局、別の人間がそのフレームワークを使えなければいけないわけで。
0556nobodyさん2008/03/31(月) 23:47:19ID:???
php書くのにちょうどいいエディタはありますか?
0557nobodyさん2008/03/31(月) 23:47:37ID:???
何年か前に書いたperlのソースを見たら死にたくなったよ

一人でも綺麗に書いた方がイイ!
0558nobodyさん2008/03/31(月) 23:56:33ID:???
>>556
emeditor
0559nobodyさん2008/03/31(月) 23:58:29ID:???
>>556
phpだけで考えるならphpeditorスタンダードアローン版
0560nobodyさん2008/04/01(火) 00:53:09ID:+ectGcI2
SQL文をヒアドキュメントにしてる場合に、配列の展開はどうすればよいでしょうか?
中括弧で括っても駄目でした。 御教示よろしくお願いします。

$sql = <<< _EOD_
INSERT INTO table2ch VALUES(
'{$entry["name"]}',
'{$entry["kana"]}'
)
_EOD_;
0561nobodyさん2008/04/01(火) 01:17:42ID:???
>>558-559
トン使ってみる。

0562nobodyさん2008/04/01(火) 01:26:48ID:???
>>560
出るよ

$entry = array('name'=>'a', 'kana'=>'b');
$sql = <<< _EOD_
INSERT INTO table2ch VALUES(
'{$entry["name"]}',
'{$entry["kana"]}'
)
_EOD_;
echo $sql;

↓結果
INSERT INTO table2ch VALUES( 'a', 'b' )
0563nobodyさん2008/04/01(火) 01:31:50ID:???
複数の変数展開を要するHTMLの出力には、
ヒアドキュメントを使って全てまとめて出力するのと、
変数部分のみを<?php echo $hoge;?>のようにして出力するのでは
どらが高速でしょうか?
0564nobodyさん2008/04/01(火) 01:36:37ID:???
死ぬほどわずかしか変わらないから自分が書きやすいほうでおk
0565nobodyさん2008/04/01(火) 01:42:15ID:???
即レスありがとうございます
死ぬほどわずかでも速い方が精神衛生上良いので、
もし分かれば教えて欲しいです
0566nobodyさん2008/04/01(火) 02:05:45ID:???
なら前者。
俺ならテンプレートエンジン使うし使わない場合でもHTMLを変数に格納して変数展開はドット演算子で接続するかな。
0567nobodyさん2008/04/01(火) 07:02:29ID:???
インタープリタで死ぬほどわずかな差を求めても意味ないだろ。
速くしたけりゃ中間言語コンパイラ使うとかもっと抜本的な
解決策を探るべきだよ。
0568nobodyさん2008/04/01(火) 07:07:25ID:???
ううん
愛なんていらないの
優しい言葉が欲しいだけなの
0569nobodyさん2008/04/01(火) 07:11:52ID:???
重複しないように値を入れていきたいのですがうまくいきません(重複してしまいます)

if($list["$i"] == ""){
  $list["$i"] = "1234";
}

$list["$i"] == "" この式がおかしいのでしょうか?

もし$list["$i"]がなければ処理という式はどう書けばいいでしょうか?
0570nobodyさん2008/04/01(火) 07:12:22ID:???
>>568

夕べの寝言、わざと言ったんだよ。知ってた?
05715692008/04/01(火) 07:32:15ID:???
事故解決しますた

配列またはオブジェクトをキーとして使用することはできません。
これを行なうと、warning: Illegal offset type を発生します。

だって
0572nobodyさん2008/04/01(火) 08:03:38ID:???
うまくいかないで伝わるわけないだろ
0573nobodyさん2008/04/01(火) 09:18:24ID:QfLzxrc0
任意のファイル名でファイルをダウンロードさせるにはどうしたらいいですか?
content-typeをtext/html以外にして出力すれば、
ダウンロード自体はさせることが出来ましたが、
ファイル名が、その処理をするphpのuriになります
リクエストを受けたPHP側で、ダウンロードさせるファイル名を決定するには
どうしたらいいのでしょうか?
0574nobodyさん2008/04/01(火) 09:19:25ID:???
>>573
http://jp2.php.net/header
0575nobodyさん2008/04/01(火) 15:07:37ID:???
>>569

>>1読んでID出そうな

isset
empty
だろうか、やりたいことがはっきり分からない

問題の出るきちんと動く最小ソースを張れ
0576nobodyさん2008/04/01(火) 15:22:24ID:???
>>575
>>571らしい。
0577nobodyさん2008/04/01(火) 16:46:41ID:???
>>574
Content-Dispositionというヘッダを使えばいいんですね
ありがとうございました
0578nobodyさん2008/04/01(火) 17:59:15ID:QfLzxrc0
PHPで出力をダウンロードさせている時に
ブラウザ側からコネクションが切断された場合、
それを検出するにはどうしたらいいですか?
TCPだからapacheはコネクションの切断を検知してますよね
だからといっていきなりPHPの処理を止めることはないような気がします
何らかのイベントが飛んでくる…?
0579nobodyさん2008/04/01(火) 18:06:41ID:???
>>578
マニュアル最高ォォォ!!!
http://www.php.net/manual/ja/features.connection-handling.php
0580nobodyさん2008/04/01(火) 20:20:45ID:???
PHPのロゴマークが物故割れた!!
0581nobodyさん2008/04/01(火) 20:30:50ID:???
今年はこれか
そういえば犬の出るバージョンがあったな
■ このスレッドは過去ログ倉庫に格納されています