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

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

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

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

過去スレは>>2
06676662006/07/18(火) 18:21:45ID:n2ZEUTcJ
ちなみにline22,23は
$a = $a1 + $a2 + $a3;
$b = $b1 + $b2 + $b3;
これです。
0668nobodyさん2006/07/18(火) 18:54:02ID:???
なんか宿題スレになってんな
0669nobodyさん2006/07/18(火) 19:00:43ID:???
>>645
ttp://wiki.2chx.net/php/index.php?cmd=read&page=%A5%E1%A1%BC%A5%EB%C1%F7%BF%AE%40windows
0670nobodyさん2006/07/18(火) 19:08:03ID:???
>>666
>660と>657を掛け合わせれば解決できるのではないかと。
複合演算子を使う必要があります。

PHP: 代入演算子 - Manual
ttp://jp.php.net/manual/ja/language.operators.assignment.php

>657を元に、複合演算子で変数をまとめても良いですが、
どちらかといえば660氏のアルゴリズムを流用した方がスッキリすると思います。

>>667
ちゃんと、英語読んでます?
辞書を引けば解るレベルの英文だと思うのですが…。

「警告: 未定義の変数があります: a1 in...line22」
「警告: 未定義の変数があります: b1 in...line23」

お分かりでしょう?
それぞれの右辺の3つの変数がセットされていなければ、「変数が初期化されていません」とエラーが返ってくるは道理です。
必ず、初期化済みの変数でもって式を構成しなければなりません。
06716702006/07/18(火) 19:11:21ID:???
む…、>664で答えが出てますね。失礼しました。

ただ、最初から答えを教えるとあまり勉強にならないと思いますが…、余計なお節介かな。
0672nobodyさん2006/07/18(火) 19:30:10ID:???
>>670
> 必ず、初期化済みの変数でもって式を構成しなければなりません。
別にエラーレベルを下げちゃっても全然かまわんと思うけどね。
初心者の勉強のために消さない方がいいと考えてるんだろうけど
「必ず」ってこたないだろ。
0673nobodyさん2006/07/18(火) 19:32:50ID:???
>>670
> 複合演算子を使う必要があります。
必要ってことはない。使えばすっきりするだけだ。
0674nobodyさん2006/07/18(火) 19:36:08ID:???
>>664
おいおい。それだと最初のチェックボックスをチェックしなかったらキーがずれるぜ?
合わせて
<input type="checkbox" name="type[0]" value="a">
<input type="checkbox" name="type[1]" value="b">
<input type="checkbox" name="type[2]" value="c">
とHTMLも書き直してやらなきゃ。
0675nobodyさん2006/07/18(火) 19:37:29ID:???
なんか回答してる側もヘタレ揃いだな。
授業で覚えたばかりの連中が回答やってんのか?
06766622006/07/18(火) 19:44:29ID:???
>>666
なんで>>662ですでに原因まで書いてやってるのに対処できないの?
0677nobodyさん2006/07/18(火) 19:48:21ID:???
>>674
そーだった。thx
06786702006/07/18(火) 19:58:09ID:???
>>672
確かに、「必ず」は言い過ぎかな。
「その方がよい」というニュアンスでしょうか。

>>673
そうかもしれませんが、この場合は複合演算子を使う方が多いんじゃないですかね。

>>664,677
連想配列を使っても良さそうですね。
(HTMLで配列の要素の順番を考えなくても良いという意味で。)
06796702006/07/18(火) 20:09:46ID:n2ZEUTcJ
>>676
すみません。
その初期化の方法がわからなくて困っているんですが。
0680nobodyさん2006/07/18(火) 20:19:09ID:???
丸投げだな・・・
0681nobodyさん2006/07/18(火) 20:34:25ID:???
>>679
マニュアルぐらい読んでください。必要最低限の事です。

Google検索: 変数 初期化とは
ttp://www.google.co.jp/search?ie=euc-jp&lr=lang_ja&num=30&q=%ca%d1%bf%f4+%bd%e9%b4%fc%b2%bd%a4%c8%a4%cf
PHP: 変数 - Manual
ttp://www.php.net/manual/ja/language.variables.php
06826702006/07/18(火) 20:39:22ID:n2ZEUTcJ
>>680
自分でも色々と調べているのですが
うまくいかなくて・・・

初期化(?)なのかわからないですけど
$a1=$a2=$a3=$b1=$b2=$b3=0;
これを入れたらerrorが出ないようになりました。
こういうことで良いのでしょうか?
0683nobodyさん2006/07/18(火) 21:01:48ID:???
>>682
せいーかーい
どんどんどんぱーふーぱーふー
0684nobodyさん2006/07/18(火) 21:09:07ID:???
>>658
だからさ、絶対パスまたは絶対URLで書けばいいでしょ。
なんで相対パスにこだわってんの?
っていうかそれくらい自分の頭で考えてよ・・・
0685nobodyさん2006/07/18(火) 21:12:20ID:???
>>684
考えた結果「割り切ることにした」と書いてるんじゃないのか??
0686nobodyさん2006/07/18(火) 21:17:40ID:???
1.設定用PHPファイルはドキュメントルートなどを基準にした場所に置く
2.大元の設定用PHPファイルから各ディレクトリにシンボリックリンクを作る
3.大元の設定用PHPファイルを相対パスでincludeする同名のPHPファイルを各ディレクトリに置く
のどれか辺りでどうよ?
0687nobodyさん2006/07/18(火) 22:07:58ID:???
丸投げ野郎はスルーしとけ
このままじゃ他に質問したい人が居てもその雰囲気に気圧されするかレスの海に飲み込まれるぞ
0688nobodyさん2006/07/18(火) 22:08:46ID:???
>>685
だから別に割り切らなくても解決できるっつってんの。
諦めずに考えろっっつってんの。

>>686
まあ大元の設定用ファイルは、そもそもディレクトリを変えないことが基本だよね。
で、分かりやすい場所に置く(セキュリティ面も含めて、privateフォルダなどが良い)
0689nobodyさん2006/07/18(火) 22:10:52ID:???
>>644
素晴らしい解答だけど、元質問の

>strlenはひらがな、カタカナ、漢字を
>全て3バイトとカウントすると仮定しても大丈夫でしょうか?

という仮定が前提になっているような・・・。
そういう意味では>>640の方が安全なのかな?
0690nobodyさん2006/07/18(火) 23:29:36ID:???
mb_strwidthを使うべし
0691nobodyさん2006/07/18(火) 23:57:48ID:P26DbQmu
こんばんは。
質問です。
PHPには、ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
そして差異のある部分をHTMLで太字にしてみるとか。

ご存知だったらうれしいのですが。
0692nobodyさん2006/07/19(水) 00:15:13ID:???
>>691
> ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
差異があるということは等しくないと等価。
従って、以下のようになる。

if($str1 != $str2){ 処理 }

> そして差異のある部分をHTMLで太字にしてみるとか。
まず、どういう視点で「差異がある」と見なすかを定義しなければならない。
行毎に差異を見なすのか、1バイトずつ見て、差異があった部分からEOFまでを差異と見なすのか、...etc
0693nobodyさん2006/07/19(水) 00:39:22ID:???
>>691
> PHPには、ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
無い。exec()でdiffを呼び出すとかしれ。
しかしdiffにしたって行単位で違いを探すだけで、1行の中でどこからどこまでが違うとかは出さないけどな。

> そして差異のある部分をHTMLで太字にしてみるとか。
それは自分でstr_replace()などで処理すべきことだ。
「どのように表示するか」を勝手にやるような関数なんて普通あるわけないでしょう。
0694nobodyさん2006/07/19(水) 00:47:50ID:???
>>688
その解決が絶対パス??数百のHTMLがあったらそれぞれに絶対パス書いちゃって、
サーバー環境が変わったり、同一サーバーに同じ構成のプログラムを2つ入れる羽目になったら、
全ファイル一括置換とかしてるわけ?
少なくとも>>684は全く解決案になってないと思うんだが、何そんな偉そうなんだ。
0695nobodyさん2006/07/19(水) 00:52:37ID:???
>何そんな偉そうなんだ。
馬鹿だからw
0696nobodyさん2006/07/19(水) 01:24:44ID:???
>>694
一括で変換する必要があれば変換すれば良いだけだろ?
やり方知らんの?w
0697nobodyさん2006/07/19(水) 01:28:08ID:???
>>696
ようするに君の>>604への回答は
「ディレクトリの変更があったら全部置換すればいい」
でFAなわけだw
0698nobodyさん2006/07/19(水) 01:37:29ID:???
>>697
違うけどw
あほすぎwww
0699nobodyさん2006/07/19(水) 01:44:32ID:???
>>698
アホかお前。初心者は解答すんなよ。
0700nobodyさん2006/07/19(水) 02:00:51ID:???
質問者置いてけぼりで議論を始めることも無かろう、と思うわけですが。
前向きな議論なら大変結構なのですがね。
0701nobodyさん2006/07/19(水) 02:25:05ID:???
SNS作ってんだけど、ユーザの情報をすべてDBに格納するのはまずいかな。
pass情報はハッシュだけにしたほうが良い?
0702nobodyさん2006/07/19(水) 02:26:20ID:???
そのほうが良いと思うよ。
07036562006/07/19(水) 02:39:22ID:???
>>694
>数百のHTMLがあったらそれぞれに絶対パス書いちゃって

相変わらずものすごい勘違いしてるね・・・
いや、勘違いっていうか、>>656で示した手法を全く理解できてないみたいね。

誰が「数百のHTMLの絶対パスを書け」なんて言ったのよ? 誰も言ってないでしょうよ。
俺が>>656で示した手法なら、絶対パスを書くファイルはconfig.php一つのみ。

せっかく他人がいろいろと具体例を挙げて説明してやってんのに、
自分がバカで理解できないからってそんな偉そうに文句つけてたら誰も教えてくれなくなるよ。
0704nobodyさん2006/07/19(水) 02:50:58ID:???
>>703
いやだから、そのconfig.phpをincludeする部分はどーすんのって話でしょうが。
そこは結局相対パスで書くのか?
07057012006/07/19(水) 03:42:26ID:???
じゃpassはどこに保存すればいいですか。
0706nobodyさん2006/07/19(水) 04:21:12ID:???
>>704
ヒント:
config.php自体のincludeパスのみを定義・格納したメタconfigを用意する。
0707nobodyさん2006/07/19(水) 04:31:22ID:???
youtubeのURLで使っているような「wNbaCwt05ng」みたいな
ユニークなID文字列をPHPで作りたいのですが、
どうするのがよいでしょうか?
tempnam()を使うとそれっぽい文字列を取得できるのですが、
同時にファイルを作成してしまうのが、余計に思っています。
0708nobodyさん2006/07/19(水) 04:48:34ID:???
>>705
DBにハッシュで保存
0709nobodyさん2006/07/19(水) 04:50:13ID:???
>>707
http://www.google.co.jp/search?hl=ja&q=PHP+%E3%83%A6%E3%83%8B%E3%83%BC%E3%82%AF&lr=
0710nobodyさん2006/07/19(水) 04:59:37ID:???
>>709
uniqid()?もまぁありなんですが、
できれば現在時間に依存せず、完全にランダムな文字列で、
大文字も使用して、短い文字列を希望しています。。
0711nobodyさん2006/07/19(水) 05:11:41ID:???
>>710
なんか適当にランダムな数値を作って、それを base_convert で 36 進数にする
0712nobodyさん2006/07/19(水) 06:43:23ID:???
>>706
無限るーぷかwww
0713nobodyさん2006/07/19(水) 07:10:43ID:???
つか、どういう手法で実装するかはケースバイケースだろう。
それは質問者の方が無い知恵絞って自分のケースに合った実装方法を選択するべき。
このスレで議論するのはあくまで「一般的な」「よく目にする」ものであって・・・ここまで書いといてなんだが言葉が続かん。
とりあえずもちつけ。俺もおまいらも。
0714nobodyさん2006/07/19(水) 08:25:22ID:???
>>710
「他と重複しない完全なランダム」をどこにも記録せずに一発で生成するのは無理があるから
ファイルを作るのがイヤならDBに過去のキーを全部記録しとくとかしないと無理じゃない?
uniqid()は衝突の危険を回避するために現在時間を利用してるわけで、それも無しとなると、
ランダムな名前を試しに作る→過去のデータに重複がないか検索→重複してたら再生成
みたいなループを自力でやんないと原理的に不可能だよ。
(過去データを保持できるのは自分のプログラムだけなんだから、それを自動で処理する関数はありえない)
07157142006/07/19(水) 08:41:52ID:???
>>710
で、単にランダムなだけで、既存と重複してるかどうかは無視していいのであれば、
function randstring($len) {
$c = array_merge(range(0, 9), range("a", "z"), range("A", "Z"));
$s = '';
for($i = 0; $i < $len; $i ++) {
$s .= $c[array_rand($c)];
}
return $s;
}
こんな程度で任意の桁数の数字・大小英文字の組み合わせでの文字列は作れる。
あとは作る→探す→作るをひたすら繰り返すだけ。
0716nobodyさん2006/07/19(水) 09:36:16ID:???
>>705
・パスワードは保存しない、「忘れた」対応は新規に仮パスワードを振り出す
・比較用のハッシュとは別に暗号化して保存、キーはひみつの質問の答え、e-mailアドレス等から生成
こんなんでどうですか?
0717nobodyさん2006/07/19(水) 10:04:07ID:+mavFuWs
PHP4.3.xのソースが欲しいんですが、どこかでダウンロードできますか?
本家では最新の4.4しか置いてなさそうなんですが、実はどこかにあったりします?
0718nobodyさん2006/07/19(水) 10:11:01ID:???
>>717
PHPのサイトのDownloadのページに
Older versions of PHPってページへのリンクがあるけど?
0719nobodyさん2006/07/19(水) 10:14:46ID:???
javascript が on になってるかどうかで
処理分岐することは可能でしょうか?
可能な場合、方法教えてくりませ
0720nobodyさん2006/07/19(水) 10:16:39ID:???
$serial=array('\[(.+)\]','(.+)');
こうなってる
だから
print $serial[1];
が正解
07217202006/07/19(水) 10:17:29ID:???
誤爆しますた
0722nobodyさん2006/07/19(水) 10:19:55ID:???
>>719
ググれば星の数ほどサンプルが転がってる。
0723nobodyさん2006/07/19(水) 10:37:09ID:???
もはよう おまいら

何か昨日は祭りだったみたいだな
ID:n2ZEUTcJ みたいなのにはレスすんな
途中から670とか名乗ってるしw
0724nobodyさん2006/07/19(水) 10:59:42ID:Ay+5zUkF
すみませんが、教えてください。

PHPの4.3で、クラスのメンバ関数の呼び出しを変数を使って
呼び出したいんですけどできませんか?

$func1 = "testfunc1()";
$testClass->$func1;

0725nobodyさん2006/07/19(水) 11:22:57ID:???
>>724
$testClass->{$func1}
こうやってはいかがかな?
0726nobodyさん2006/07/19(水) 11:41:22ID:???
>>725
レスありがとうございます。が、しかし、Undefine Propertyになってしまいます・・・
0727nobodyさん2006/07/19(水) 11:52:47ID:???
>>724
現象が再現する最小限のソースプリーズ。
0728nobodyさん2006/07/19(水) 12:02:12ID:???
>>724
$func1 = "testfunc1";
$testClass->$func1();
または
$testClass->{$func1}();

ってカンジでどうでしょう?
07297172006/07/19(水) 12:20:13ID:+mavFuWs
>>718
ありがとう。
ページの右側ばっかり見てました。
0730nobodyさん2006/07/19(水) 12:35:41ID:???
おおぉ、皆様ありがとうございます。

>>727,728

$testClass->{$func1}();

この方法でOKでした。これなら、クラスを引数に渡せるし、
助かりました。

0731nobodyさん2006/07/19(水) 12:46:22ID:???
皆さん何かお勧めの参考書や辞典はありますか?

自分は
PHP辞典
PHPスーパーサンプル第2版
をよく読みます。(主に辞典)

何かお勧めの参考書などがあれば教えていただけませんか?
0732nobodyさん2006/07/19(水) 12:48:54ID:???
PHPマニュアル、Google

マジお薦め
0733nobodyさん2006/07/19(水) 12:55:32ID:???
>>717
cvs -d :pserver:cvsread@cvs.php.net:/repository checkout -r PHP_4_3 php-src
07347072006/07/19(水) 13:18:50ID:???
>>715
サンプルコードありがとう。
uniqidを、大文字も利用した短縮文字列に変換して、
必要であればなんらかの暗号的変換もかけるのはどうだろう?
と今思いつきました。
0735nobodyさん2006/07/19(水) 13:25:46ID:???
>>731
やはり、
http://jp.php.net/manual/ja/
これがもっともお勧めだな。
0736nobodyさん2006/07/19(水) 13:46:04ID:???
>>734
欲しいのは大文字だけなの?
uniqid()をベースにする限り、「現在時間に依存しない」「短い文字列」という希望は満たせないわけだが。

> なんらかの暗号的変換もかける
その時点でその文字列はユニークじゃなくなってしまう可能性が高いんで
最初から自力でランダムな文字列を生成するのと何も変わらなくなってしまうんだが。
0737nobodyさん2006/07/19(水) 13:51:12ID:/PVcx7MW
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=shift_jis">
<title>test</title>
</head>
<body>
<?php echo "hello"; ?>
</body>
</html>

を実行すると

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=shift_jis">
<title>test</title>
</head>
<body>
hello</body>
</html>

になって微妙に気持ち悪いんだが、これは仕様?
07387072006/07/19(水) 13:58:05ID:???
>>736
>> なんらかの暗号的変換もかける
>その時点でその文字列はユニークじゃなくなってしまう可能性が高いんで
>最初から自力でランダムな文字列を生成するのと何も変わらなくなってしまうんだが。
uniqidがベースなので、ユニークにできますよ。
また厳密には、現在時間に依存しますが、
容易に推測されないランダムな文字列になっていればいい、
という感じです。
0739nobodyさん2006/07/19(水) 14:08:15ID:???
さすが>>707
世界中の暗号学者が必死になって証明することを簡単に言ってのけるッ
0740nobodyさん2006/07/19(水) 14:09:48ID:???
>>738
>709の示した
ttp://phpspot.net/php/pg%83%86%83j%81%5B%83N%82%C8%82h%82c%82%F0%93%BE%82%E9.html
が希望に近いと思うが、どちらにせよ既存のIDと重複しないために、重複チェックは必要になる。
「重複チェックに引っかかる→再試行」の繰り返しを忘れぬよう。
0741nobodyさん2006/07/19(水) 14:09:49ID:???
進数変換と同様に、コード中に使える文字の種類を増やして
1対1の可逆変換で短縮した文字列を再生成するってことだな。
できるじゃね?
0742nobodyさん2006/07/19(水) 14:11:26ID:???
>>737
仕様
0743nobodyさん2006/07/19(水) 14:15:43ID:/PVcx7MW
>>742
まじかorz
回避方法は改行を余計に入れる、ってことくらいか?
07447072006/07/19(水) 14:21:34ID:???
uniqid() を16進数から36進数に変換して、
軽くシャッフルするとかシフトするとかすれば、(容易に推測されない程度の暗号化)
できそうですよね?
0745nobodyさん2006/07/19(水) 14:23:04ID:???
好きなようにすればいいと思うよ
暗号強度についてはスレ違いだしな
0746nobodyさん2006/07/19(水) 14:23:26ID:???
>>743
PHPタグはHTMLの途中に挿入するケースが多いから、
そのときに余分な改行が入らないように直後の改行を除去するようになってる。
逆に改行が入って欲しいなら、必要な分だけ改行を追加するしかないだろうね。
07477072006/07/19(水) 14:24:49ID:???
>>744
36進数は間違い。62進数(大文字つき)で。
0748nobodyさん2006/07/19(水) 14:25:36ID:???
>>744
36進数への変換まではいいと思うけど、シャッフルはユニークさが失われるからダメじゃない?
シフトってのがA,B.C→4,5,6みたいな1対1変換を指してるならそれは問題ないと思う。
07497072006/07/19(水) 14:31:08ID:???
>>748
シャッフルもパターンに則って行えば、シフトと同じようなもんです。
暗号化としてはゆるいですけど、外から推測困難な程度でいいので。
0750nobodyさん2006/07/19(水) 14:32:31ID:???
>>749
ああ、ルールに基づいて桁位置を一部入れ替えるってことね。いいんじゃね?
0751nobodyさん2006/07/19(水) 14:34:42ID:/PVcx7MW
>>746
わかった。サンクス!
0752nobodyさん2006/07/19(水) 16:04:01ID:???
飯食う時間ないんだけど、どうすればいい?
07537072006/07/19(水) 16:30:05ID:???
シフトは少し意味が薄いような感じでした。
シャッフルしてから、進数変換すると、
いい感じにランダムっぽくできました。
0754nobodyさん2006/07/19(水) 18:30:14ID:???
知っている人には簡単なことだと思うのですが

list($a, $b) = explode("|", $str);

みたいに書いたときに、| が含まれていない $str が来た場合に
Undefined offset の NOTICE が出ます。これが出ないように
うまい具合に短く書く方法はないでしょうか。

セパレータが含まれているかどうかを事前に判定して処理を分けるのも
考えましたが、あまり賢い方法じゃないように思えて。
0755マリー・アントワネット2006/07/19(水) 18:39:31ID:???
未定義だと言われるのなら先に定義しておけばいいじゃない。
0756nobodyさん2006/07/19(水) 18:41:59ID:???
>>754
区切り文字の数に規則性がないのなら、左辺を配列にしてしまえば良いのではないでしょうか?

$array = explode("|", $str);
foreach($array as $val){
処理
}
0757nobodyさん2006/07/19(水) 18:42:00ID:???
>>754
こんなのはどうですか?
list($a, $b) = explode("|", $str . "|");
0758nobodyさん2006/07/19(水) 18:43:43ID:???
ていうか、これがよい。
list($a, $b) = @explode("|", $str);
0759nobodyさん2006/07/19(水) 18:45:45ID:???
error_reporting(E_ALL ^ E_NOTICE);
0760軟式PHP2006/07/19(水) 18:59:40ID:???
>>759
臭いものには蓋をする的なレスだなw
0761nobodyさん2006/07/19(水) 19:08:31ID:ae0kzGe1
classが全然わかりません
先生助けて
foo::foget($this->hoge);

の::てどういう意味でしょう??
0762nobodyさん2006/07/19(水) 19:17:11ID:???
>>761
>>334-338嫁ボケ!お前のかーちゃんでべそ!!
0763nobodyさん2006/07/19(水) 19:48:11ID:???
やーい、やーい
お前のかーちゃん お・ん・な!!
0764nobodyさん2006/07/19(水) 20:14:14ID:???
float型の 1.49080555641E+15 を、
一般的な数値の表示形式に変換して表示することはできますか?
単純にint型にすると、オーバーフローしてしまうので・・。
07657642006/07/19(水) 20:48:57ID:???
printf('%.0f', $float);
で、できたようです。

ところで、
echo $a = 1209314420881328;

echo $b = 1209314420881329;
は、違う値($a != $b)だけど、同じ表示(1.20931442088E+15)になるんですね・・。(いまいちよくわかってないです)
0766nobodyさん2006/07/19(水) 21:04:01ID:???
>>763 うちのかーちゃんそろそろ60歳なんだが、ある意味すごくイヤだなそれ
■ このスレッドは過去ログ倉庫に格納されています