【PHP】下らねぇ質問はここに書き込みやがれ 24
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/07(金) 14:54:53ID:KnVubDvEここならお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0689nobodyさん
2006/07/18(火) 22:10:52ID:???素晴らしい解答だけど、元質問の
>strlenはひらがな、カタカナ、漢字を
>全て3バイトとカウントすると仮定しても大丈夫でしょうか?
という仮定が前提になっているような・・・。
そういう意味では>>640の方が安全なのかな?
0690nobodyさん
2006/07/18(火) 23:29:36ID:???0691nobodyさん
2006/07/18(火) 23:57:48ID:P26DbQmu質問です。
PHPには、ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
そして差異のある部分をHTMLで太字にしてみるとか。
ご存知だったらうれしいのですが。
0692nobodyさん
2006/07/19(水) 00:15:13ID:???> ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
差異があるということは等しくないと等価。
従って、以下のようになる。
if($str1 != $str2){ 処理 }
> そして差異のある部分をHTMLで太字にしてみるとか。
まず、どういう視点で「差異がある」と見なすかを定義しなければならない。
行毎に差異を見なすのか、1バイトずつ見て、差異があった部分からEOFまでを差異と見なすのか、...etc
0693nobodyさん
2006/07/19(水) 00:39:22ID:???> PHPには、ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
無い。exec()でdiffを呼び出すとかしれ。
しかしdiffにしたって行単位で違いを探すだけで、1行の中でどこからどこまでが違うとかは出さないけどな。
> そして差異のある部分をHTMLで太字にしてみるとか。
それは自分でstr_replace()などで処理すべきことだ。
「どのように表示するか」を勝手にやるような関数なんて普通あるわけないでしょう。
0694nobodyさん
2006/07/19(水) 00:47:50ID:???その解決が絶対パス??数百のHTMLがあったらそれぞれに絶対パス書いちゃって、
サーバー環境が変わったり、同一サーバーに同じ構成のプログラムを2つ入れる羽目になったら、
全ファイル一括置換とかしてるわけ?
少なくとも>>684は全く解決案になってないと思うんだが、何そんな偉そうなんだ。
0695nobodyさん
2006/07/19(水) 00:52:37ID:???馬鹿だからw
0700nobodyさん
2006/07/19(水) 02:00:51ID:???前向きな議論なら大変結構なのですがね。
0701nobodyさん
2006/07/19(水) 02:25:05ID:???pass情報はハッシュだけにしたほうが良い?
0702nobodyさん
2006/07/19(水) 02:26:20ID:???0703656
2006/07/19(水) 02:39:22ID:???>数百のHTMLがあったらそれぞれに絶対パス書いちゃって
相変わらずものすごい勘違いしてるね・・・
いや、勘違いっていうか、>>656で示した手法を全く理解できてないみたいね。
誰が「数百のHTMLの絶対パスを書け」なんて言ったのよ? 誰も言ってないでしょうよ。
俺が>>656で示した手法なら、絶対パスを書くファイルはconfig.php一つのみ。
せっかく他人がいろいろと具体例を挙げて説明してやってんのに、
自分がバカで理解できないからってそんな偉そうに文句つけてたら誰も教えてくれなくなるよ。
0704nobodyさん
2006/07/19(水) 02:50:58ID:???いやだから、そのconfig.phpをincludeする部分はどーすんのって話でしょうが。
そこは結局相対パスで書くのか?
0705701
2006/07/19(水) 03:42:26ID:???0707nobodyさん
2006/07/19(水) 04:31:22ID:???ユニークなID文字列をPHPで作りたいのですが、
どうするのがよいでしょうか?
tempnam()を使うとそれっぽい文字列を取得できるのですが、
同時にファイルを作成してしまうのが、余計に思っています。
0709nobodyさん
2006/07/19(水) 04:50:13ID:???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:???uniqid()?もまぁありなんですが、
できれば現在時間に依存せず、完全にランダムな文字列で、
大文字も使用して、短い文字列を希望しています。。
0713nobodyさん
2006/07/19(水) 07:10:43ID:???それは質問者の方が無い知恵絞って自分のケースに合った実装方法を選択するべき。
このスレで議論するのはあくまで「一般的な」「よく目にする」ものであって・・・ここまで書いといてなんだが言葉が続かん。
とりあえずもちつけ。俺もおまいらも。
0714nobodyさん
2006/07/19(水) 08:25:22ID:???「他と重複しない完全なランダム」をどこにも記録せずに一発で生成するのは無理があるから
ファイルを作るのがイヤならDBに過去のキーを全部記録しとくとかしないと無理じゃない?
uniqid()は衝突の危険を回避するために現在時間を利用してるわけで、それも無しとなると、
ランダムな名前を試しに作る→過去のデータに重複がないか検索→重複してたら再生成
みたいなループを自力でやんないと原理的に不可能だよ。
(過去データを保持できるのは自分のプログラムだけなんだから、それを自動で処理する関数はありえない)
0715714
2006/07/19(水) 08:41:52ID:???で、単にランダムなだけで、既存と重複してるかどうかは無視していいのであれば、
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:???・パスワードは保存しない、「忘れた」対応は新規に仮パスワードを振り出す
・比較用のハッシュとは別に暗号化して保存、キーはひみつの質問の答え、e-mailアドレス等から生成
こんなんでどうですか?
0717nobodyさん
2006/07/19(水) 10:04:07ID:+mavFuWs本家では最新の4.4しか置いてなさそうなんですが、実はどこかにあったりします?
0718nobodyさん
2006/07/19(水) 10:11:01ID:???PHPのサイトのDownloadのページに
Older versions of PHPってページへのリンクがあるけど?
0719nobodyさん
2006/07/19(水) 10:14:46ID:???処理分岐することは可能でしょうか?
可能な場合、方法教えてくりませ
0720nobodyさん
2006/07/19(水) 10:16:39ID:???こうなってる
だから
print $serial[1];
が正解
0721720
2006/07/19(水) 10:17:29ID:???0723nobodyさん
2006/07/19(水) 10:37:09ID:???何か昨日は祭りだったみたいだな
ID:n2ZEUTcJ みたいなのにはレスすんな
途中から670とか名乗ってるしw
0724nobodyさん
2006/07/19(水) 10:59:42ID:Ay+5zUkFPHPの4.3で、クラスのメンバ関数の呼び出しを変数を使って
呼び出したいんですけどできませんか?
$func1 = "testfunc1()";
$testClass->$func1;
0728nobodyさん
2006/07/19(水) 12:02:12ID:???$func1 = "testfunc1";
$testClass->$func1();
または
$testClass->{$func1}();
ってカンジでどうでしょう?
0729717
2006/07/19(水) 12:20:13ID:+mavFuWsありがとう。
ページの右側ばっかり見てました。
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:???マジお薦め
0733nobodyさん
2006/07/19(水) 12:55:32ID:???cvs -d :pserver:cvsread@cvs.php.net:/repository checkout -r PHP_4_3 php-src
0734707
2006/07/19(水) 13:18:50ID:???サンプルコードありがとう。
uniqidを、大文字も利用した短縮文字列に変換して、
必要であればなんらかの暗号的変換もかけるのはどうだろう?
と今思いつきました。
0735nobodyさん
2006/07/19(水) 13:25:46ID:???やはり、
http://jp.php.net/manual/ja/
これがもっともお勧めだな。
0736nobodyさん
2006/07/19(水) 13:46:04ID:???欲しいのは大文字だけなの?
uniqid()をベースにする限り、「現在時間に依存しない」「短い文字列」という希望は満たせないわけだが。
> なんらかの暗号的変換もかける
その時点でその文字列はユニークじゃなくなってしまう可能性が高いんで
最初から自力でランダムな文字列を生成するのと何も変わらなくなってしまうんだが。
0737nobodyさん
2006/07/19(水) 13:51:12ID:/PVcx7MW<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>
になって微妙に気持ち悪いんだが、これは仕様?
0738707
2006/07/19(水) 13:58:05ID:???>> なんらかの暗号的変換もかける
>その時点でその文字列はユニークじゃなくなってしまう可能性が高いんで
>最初から自力でランダムな文字列を生成するのと何も変わらなくなってしまうんだが。
uniqidがベースなので、ユニークにできますよ。
また厳密には、現在時間に依存しますが、
容易に推測されないランダムな文字列になっていればいい、
という感じです。
0740nobodyさん
2006/07/19(水) 14:09:48ID:???>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の可逆変換で短縮した文字列を再生成するってことだな。
できるじゃね?
0743nobodyさん
2006/07/19(水) 14:15:43ID:/PVcx7MWまじかorz
回避方法は改行を余計に入れる、ってことくらいか?
0744707
2006/07/19(水) 14:21:34ID:???軽くシャッフルするとかシフトするとかすれば、(容易に推測されない程度の暗号化)
できそうですよね?
0745nobodyさん
2006/07/19(水) 14:23:04ID:???暗号強度についてはスレ違いだしな
0746nobodyさん
2006/07/19(水) 14:23:26ID:???PHPタグはHTMLの途中に挿入するケースが多いから、
そのときに余分な改行が入らないように直後の改行を除去するようになってる。
逆に改行が入って欲しいなら、必要な分だけ改行を追加するしかないだろうね。
0748nobodyさん
2006/07/19(水) 14:25:36ID:???36進数への変換まではいいと思うけど、シャッフルはユニークさが失われるからダメじゃない?
シフトってのがA,B.C→4,5,6みたいな1対1変換を指してるならそれは問題ないと思う。
0749707
2006/07/19(水) 14:31:08ID:???シャッフルもパターンに則って行えば、シフトと同じようなもんです。
暗号化としてはゆるいですけど、外から推測困難な程度でいいので。
0751nobodyさん
2006/07/19(水) 14:34:42ID:/PVcx7MWわかった。サンクス!
0752nobodyさん
2006/07/19(水) 16:04:01ID:???0753707
2006/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:???区切り文字の数に規則性がないのなら、左辺を配列にしてしまえば良いのではないでしょうか?
$array = explode("|", $str);
foreach($array as $val){
処理
}
0758nobodyさん
2006/07/19(水) 18:43:43ID:???list($a, $b) = @explode("|", $str);
0759nobodyさん
2006/07/19(水) 18:45:45ID:???0761nobodyさん
2006/07/19(水) 19:08:31ID:ae0kzGe1先生助けて
foo::foget($this->hoge);
の::てどういう意味でしょう??
0763nobodyさん
2006/07/19(水) 19:48:11ID:???お前のかーちゃん お・ん・な!!
0764nobodyさん
2006/07/19(水) 20:14:14ID:???一般的な数値の表示形式に変換して表示することはできますか?
単純にint型にすると、オーバーフローしてしまうので・・。
0765764
2006/07/19(水) 20:48:57ID:???で、できたようです。
ところで、
echo $a = 1209314420881328;
と
echo $b = 1209314420881329;
は、違う値($a != $b)だけど、同じ表示(1.20931442088E+15)になるんですね・・。(いまいちよくわかってないです)
0767nobodyさん
2006/07/19(水) 21:54:47ID:R8UceB4D以下のようなソースですが、希望通りになりません。
$image="test.jpg";
if($image==".jpg"){
echo "これはJPEGファイルです";
}
0768nobodyさん
2006/07/19(水) 22:03:14ID:SHpEirXb正規表現でマニュアル嫁
0769nobodyさん
2006/07/19(水) 22:11:02ID:???> if($image==".jpg")
両辺が同一ではないのですから、当然、マッチしません。
正規表現を使ってください。
PHP: preg_match - Manual
ttp://jp.php.net/manual/ja/function.preg-match.php
0770nobodyさん
2006/07/19(水) 22:28:02ID:???以下のソースで出来ました。アドバイスありがとうございました。
if(preg_match("/.jpg/",$image)){
echo "これはJPEGファイルです";
}
0771nobodyさん
2006/07/19(水) 22:33:40ID:???$image = 'test.jpg.png';
でも通るから正しくない
0772nobodyさん
2006/07/19(水) 22:45:28ID:???771氏が指摘されたように、後方一致にしないと完全ではありませんね。
そのままでは部分一致です。
PHP: パターン構文 - Manual
ttp://php.liukang.com/manual/ja/reference.pcre.pattern.syntax.php
0773nobodyさん
2006/07/19(水) 22:47:54ID:???echo "これはJPEGファイルです";
}
拡張子が.jpegの時もたまにある
0775nobodyさん
2006/07/19(水) 23:00:07ID:???0776nobodyさん
2006/07/20(木) 00:05:34ID:???0777nobodyさん
2006/07/20(木) 00:32:58ID:???http://search.cpan.org/~stbey/Date-Calc-5.4/Calc.pod
0778nobodyさん
2006/07/20(木) 00:48:51ID:???まあ、関数じゃないけど、俺ならこうする。モジュール使うよりはマシ。
$a = '20060101';// 任意の日付
$weekname = array('日','月','火','水','木','金','土');
echo $weekname[date('w',strtotime($a))]; // '日'
0779nobodyさん
2006/07/20(木) 01:18:02ID:???0780nobodyさん
2006/07/20(木) 01:59:05ID:???0782754
2006/07/20(木) 02:05:26ID:???>>755
>未定義だと言われるのなら先に定義しておけばいいじゃない。
$bを先に定義してもこの NOTICE は出ますよね?そういう意味ではないかな
>>756-758
試して検討してみます。ありがとうございます。
>>759
確かに NOTICE は表示されなくなりますが…
根本的な解決にならないので…
0783nobodyさん
2006/07/20(木) 02:06:36ID:???> $bを先に定義してもこの NOTICE は出ますよね?そういう意味ではないかな
試してからやれ、このハゲ。
0786nobodyさん
2006/07/20(木) 02:14:53ID:???0787nobodyさん
2006/07/20(木) 02:16:54ID:???素直に
if(preg_match("/\.(jpg|jpeg|jpe|jeg)$/i",$image)){
echo "これはJPEGファイルです";
}
って書いた方がよさげ
でも俺、.jegって見たことないよ。どんなときに作られるんだそれ。
0788nobodyさん
2006/07/20(木) 02:23:44ID:???マジレスすると、拡張子なんて信用できない。
例えば、JPEG形式で保存された画像にファイル名を付けるとする。
そこで敢えて拡張子を「gif」にしたとする。
* * *
こんなことしてもJPEGがGIFになることはないよね。
誤解している人も多いが、HTML文書の拡張子は「html」か「htm」じゃないとダメだ ・・・なんて言う
香具師がいるけどそれは違う。
拡張子なんて関係無い。
■ このスレッドは過去ログ倉庫に格納されています