【PHP】質問スレッドpart34【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/03/21(火) 10:19:14ID:???【ガイドライン】
質問の前にgoogleやマニュアルを検索してください。
http://www.php.net/manual/ja/
http://php.s3.to/namazu/
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄には何も記述しないでください)
2. ハードウェア、OSのバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。
5. 質問者としても態度をわきまえること。
◆質問後の注意
・質問者は必ずIDを表示させてください。
書き込む場合はメール欄に何も記述しないでください。
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
過去スレ、関連リンク、FAQ等>>2-10辺り
0082nobodyさん
2006/03/25(土) 18:34:37ID:???例えばA,Bという物理的に違うサーバを用意します。ドメイン名はtest.co.jp
サーバ バーチャルドメイン ファイル
A 01.test.co.jp 01.php
02.test.co.jp 02.php
B 03.test.co.jp 03.php
04.tets.co.jp 04.php
// ファイル内処理
01.php
$_SESSION['name'] = "name";
02.php
$_SESSION['mail'] = "mail";
03.php
$_SESSION['pass'] = "pass";
04.php
$_SESSION['sex'] = "sex";
// アクセス手順
01.php → 02.php → 03.php → 04.php
0083nobodyさん
2006/03/25(土) 18:35:23ID:???01.phpにアクセスしたときsess_0123456789というセッションファイル?がAサーバにできます。
セッションデータは "name"
次に02.phpにアクセスしたときsess_0123456789にセッションデータ "mail" が追加されます。
セッションデータは "name" "mail"
次に03.phpにアクセスしたときsess_0123456789というセッションファイル?がBサーバにできます。
セッションデータは "name" "mail" "pass"
次に04.phpにアクセスしたときsess_0123456789にセッションデータ "sex" が追加されます。
セッションデータは "name" "mail" "pass" "sex"
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
実験結果です。
ローカル側から送られる情報を参照して
php.iniの設定によりセッションを共有しているとしか思えないんですが・・・
アクセスしたサーバごとに違うセッションキーが発行され、
データも共有できないと思っていたのでこの動きを信用していいものか悩んでいます。
008480
2006/03/25(土) 18:40:11ID:???session.cookie_domain = test.co.jp
となっています。
0085nobodyさん
2006/03/25(土) 19:47:01ID:???0086nobodyさん
2006/03/25(土) 23:52:07ID:???0089nobodyさん
2006/03/26(日) 01:40:48ID:???あと $_ENV とか。
0091nobodyさん
2006/03/26(日) 04:35:18ID:???foreach($array as &$value){
$value = mb_convert_encoding($value, $tocode, $fromcode
}
$valueを参照にすればこんな風に書けるよね
0094nobodyさん
2006/03/26(日) 10:54:57ID:???0096nobodyさん
2006/03/26(日) 11:16:07ID:???一理あるけど如何せん人がそこまで多いわけではないので分離は難しいかと。
次スレ立てる奴が勝手に【PHP5】質問スレッドとかにしたらいつの間にかPHP4スレも立つかもね。
もしくはくだ質がPHP4になるとか。
まあその時に誰がいるかによって変わるでしょう。
0097nobodyさん
2006/03/26(日) 12:45:29ID:???PHP5の環境も整えようと思ったけど、Windowsだとphp.iniの入れ替えがめんどいんだよな。
何かいい方法ないか?
0098nobodyさん
2006/03/26(日) 12:51:33ID:???4,5の同時起動はできないけど、バッチファイル(php-switch.bat)で切り替えの面倒を見てくれる。
0099nobodyさん
2006/03/26(日) 13:00:54ID:???忘れてたがhttpd.confの書き換えも必要なんだな。
まぁいいか。とりあえずPHP5の設定していつでも使えるようにしておく。
0100nobodyさん
2006/03/26(日) 13:32:00ID:???php-switch.batはcli版のphp(xamppに含まれている)を使って実際の切り替え処理をphp-switch.phpでやってるんだが、
それを見た感じだと php.ini httpd.conf 各バージョンのDLL 拡張モジュールのDLLあたりを切り替えてる。
0102nobodyさん
2006/03/26(日) 14:13:31ID:???0103nobodyさん
2006/03/26(日) 14:38:41ID:???PHP5 は 80、PHP4 は 8080 のように。
0104nobodyさん
2006/03/26(日) 14:50:33ID:???0105nobodyさん
2006/03/26(日) 19:33:57ID:???modphpに手を入れて二つ動かせるようにした法が良くないか?
/php4以下ならphp4が動いて、
/php5以下ならphp5が動くように。
0106nobodyさん
2006/03/26(日) 19:39:46ID:???0108nobodyさん
2006/03/27(月) 17:09:51ID:S2DOnOnv0002
0003
と桁数の決まっている数字で簡単に数字を1ずつ上げる方法はないでしょうか?
0109108
2006/03/27(月) 17:14:19ID:S2DOnOnv$num = '0010';
print $num . '<br>';
$num++;
print $num . '<br>';
print str_pad($num, 4, "0", STR_PAD_LEFT);
0110nobodyさん
2006/03/27(月) 17:57:30ID:???printf('%0'.strlen($num).'d', (int)++$num);
0111nobodyさん
2006/03/27(月) 18:02:58ID:???Q. '0001'、'0002'、'0003'・・・とインクリメントしたい
A. 数値(int)で計算した後str_padかsprintf等で整形
なにげにPHPにはどんな文字列でもインクリメントできる変な隠し機能があるけど、>>108-109のようにintへの暗黙の型変換が働いて0埋めができないので結局は数値で計算するのが最善かな。
0112nobodyさん
2006/03/27(月) 18:14:05ID:???0114nobodyさん
2006/03/27(月) 18:18:45ID:???perlだと試してみたら
$num = '0001'; $num ++;
でちゃんと'0002'になるんだね。
phpありえなす・・・
0115nobodyさん
2006/03/27(月) 18:22:41ID:???0118nobodyさん
2006/03/27(月) 20:42:30ID:???$a = 'a';
$a++;
で $a が b になるしな。
0120nobodyさん
2006/03/27(月) 20:53:52ID:???0121nobodyさん
2006/03/27(月) 20:58:24ID:???0122nobodyさん
2006/03/27(月) 21:00:32ID:???さすがに
$a = "azz";
$a ++;
で $a が "baa" になったりはしないけどな >CやJava
0123nobodyさん
2006/03/27(月) 21:18:24ID:???0124nobodyさん
2006/03/27(月) 21:28:12ID:???PHP5.0のsqliteみたいに、将来標準から脱退になったりしませんか?
0126nobodyさん
2006/03/27(月) 22:23:40ID:???0127nobodyさん
2006/03/27(月) 23:36:54ID:???0128nobodyさん
2006/03/28(火) 00:24:08ID:???0130nobodyさん
2006/03/28(火) 02:05:12ID:???0132nobodyさん
2006/03/28(火) 12:23:20ID:???まあ0001の次は、0010かもしれんし(w
0133nobodyさん
2006/03/28(火) 12:46:32ID:???そのへんはphpもperlも基本的に各桁で数字なら数字、大文字なら大文字、小文字なら小文字でループしながら、繰上げは右から左に伝播するように統一されてるみたいだ。
ただphpの場合は自動型変換が最悪の事態を引き起こす。
$n = '1d7';
$n++; // '1d8'
$n++; // '1d9'
$n++; // '1e0'
$n++; // 2 ・・・あれ?
$n++; // 3
:
この機能、使わないのが一番かと思われます。
0134nobodyさん
2006/03/28(火) 13:36:45ID:???0135nobodyさん
2006/03/28(火) 15:28:44ID:???0136nobodyさん
2006/03/28(火) 16:12:05ID:qFPc77vuどうにも、こうにも、結果が面白くなくて、、困っています。
以前 php.iniを単独で作るって言う方法があったとおもうので、
資料や、その紹介サイトだけでもいいの、
ご存知でしたら、教えていただければ、幸いです。
もしくは、方法教えていただければ、幸いです。お願いします。
0137nobodyさん
2006/03/28(火) 16:26:32ID:???aaa<>bbb<>ccc<>ddd
bbb<>ccc<>ddd<>eee
・・・・
のようになっていて、これを縦の値でソートしたいんですが
何か方法はないものでしょうか?
0138nobodyさん
2006/03/28(火) 16:42:57ID:qFPc77vuaaa bbb<>ccc<>ddd
bbb ccc<>ddd<>eee
と引っ張って、 aaaを配列のキーにしてみては?
0140nobodyさん
2006/03/28(火) 17:22:22ID:???大変申し訳ないです。もっと具体的に書きます。
id1<>1000<>2000<>3000
id2<>5000<>4000<>6000
id3<>3000<>8000<>1000
・・・・・
のようなテキストファイルが存在する時、
縦方向を見て、大小を比較してソートしたいのです。
たとえば、2列目をソートするような命令があった場合、
1000、5000、3000の大小を比較し、
5000、3000、1000や、1000、3000、5000のようにソートしたいのです。
そのときにあわせて横一列丸ごと表示してほしい訳です。
つまり、表示するときは
id2 5000 4000 6000
id3 3000 8000 1000
id1 1000 2000 3000
のように。
お知恵を貸してくださいorz
0141nobodyさん
2006/03/28(火) 18:08:10ID:qFPc77vu近頃は区切り文字を <> にするのがはやり?
まあ、それはいいとして、とりあえず、、
検索する場所を配列のキーにして、そのrecordごと文字列として入れる
配列のキーをソートする
配列を順番に取り出す。
区切り文字で配列を変数化する
でよくないのかな?
すまん、、もっとスマートな方法はあるかもしれんが、、、、近頃CSVのソートなんてしないので、、
SQLに頼りっきりってのが、だめなのかのー
0145nobodyさん
2006/03/28(火) 18:31:44ID:???とてもじゃないがログファイル作る気になれn
0146nobodyさん
2006/03/28(火) 18:57:34ID:???PHPの過去の遺産(?)を使うとこんな感じ。
$k = 1; // 2列目
// 1. array_multisort
$data = array(); $columb = array();
foreach (file($file) as $line) if ($line = rtrim($line)) {
$record = explode('<>', $line); $data[] = $record; $columb[] = $record[$k];
}
array_multisort($columb, SORT_NUMERIC, $data);
foreach ($data as $record) echo implode(' ', $record), "\n";
// 2. usort
$data = array();
foreach (file($file) as $line) if ($line = rtrim($line)) {
$record = explode('<>', $line); $data[] = $record;
}
usort($data, create_function('$a, $b', 'global $k; return $a[$k] < $b[$k] ? -1 : $a[$k] > $b[$k];'));
foreach ($data as $record) echo implode(' ', $record), "\n";
// 3. ksort
$data = array();
foreach (file($file) as $line) if ($line = rtrim($line)) {
$record = explode('<>', $line); $data[$record[$k]] = $record;
}
ksort($data, SORT_NUMERIC); $data = array_values($data);
foreach ($data as $record) echo implode(' ', $record), "\n";
0147nobodyさん
2006/03/28(火) 19:04:31ID:???0148nobodyさん
2006/03/28(火) 21:57:46ID:???結構便利っぽかったのに。
0149nobodyさん
2006/03/28(火) 22:28:37ID:???sqlite2とsqlite3の互換性無かったはず。sqlite4に成ったらどうなるか予想出来るよね?
0150nobodyさん
2006/03/28(火) 22:37:26ID:???0151nobodyさん
2006/03/28(火) 22:39:00ID:???しかもライブラリは「覚えて使う」ようなものじゃねーぞ?
0153nobodyさん
2006/03/28(火) 22:56:51ID:j0f8wCQk自分でも調べた事はここに書く予定
0155nobodyさん
2006/03/29(水) 02:39:02ID:???1つ目の軸のグラフの後ろに隠れてしまう。
オーダーを変更して2軸目のグラフを前面に出したいけど
どうしたらいいかな?
0157nobodyさん
2006/03/29(水) 20:45:59ID:???0159nobodyさん
2006/03/29(水) 21:35:42ID:xErJGbSuお前自分が恥ずかしくないのか?
0160nobodyさん
2006/03/29(水) 21:41:49ID:???0163nobodyさん
2006/03/29(水) 22:34:02ID:Vy3b1LJ+1,,,,,,
1,,,4,,6,
1,,3,4,5,6,7
1,,3,4,,6,7
1,,3,4,,6,
な値(,で繋がってる値)の配列があって、この値を利用して以下の配列
を作りたいのです。
$count=array('1'=>1の合計,'2'=>2の合計,'3'=>3の合計・・・)
splitで1,2,3をバラバラにするとこまでは出来るのですが、後どうした
らよいかわかりません。だれかアドバイス下さい。お願いします!
0164nobodyさん
2006/03/29(水) 22:47:16ID:xErJGbSu0165nobodyさん
2006/03/29(水) 22:48:59ID:xErJGbSu0166nobodyさん
2006/03/29(水) 22:53:28ID:Vy3b1LJ+まちがってたらすいません。explode()だとsplit()と同じですよね?
array(1,2,3,4,5,6,7)
って配列が出来たとして、これを行分作って足さないといけないんで
しょうか?
0167nobodyさん
2006/03/29(水) 23:19:39ID:???質問がわかりにくい。
最初の配列は
$array = array(
'1,,,,,,',
'1,,,4,,6,',
'1,,3,4,5,6,7',
'1,,3,4,,6,7',
'1,,3,4,,6,'
);
で、結果の配列は
$count = array('1' => 5, '2' => 0, '3' => 3, '4' => 4, '5' => 1, '6' => 4, '7' => 2);
になりゃいいの?
7って数字は固定なの?それとも配列の情報から動的に計算しなきゃいけないの?
0168nobodyさん
2006/03/29(水) 23:28:55ID:Vy3b1LJ+わかりずらかったですね。すいません。
おっしゃる通りです。7って数字は固定ではなく動的です。
checkboxからの値を","でjoin()されて配列にユーザーごとに格納されて
います。
0169nobodyさん
2006/03/29(水) 23:59:17ID:???なんかよーわからんけど、とりあえず。
$array = array(
'1,,,,,,',
'1,,,4,,6,',
'1,,3,4,5,6,7',
'1,,3,4,,6,7',
'1,,3,4,,6,'
);
$count = array();
foreach ($array as $each) {
foreach (array_count_values(explode(',', $each)) as $n => $cnt) {
if ($n) {
@ $count["$n"] += $cnt;
if (@ $max < $n) $max = $n;
}
}
}
for ($i = 1; $i < $max; $i ++) {
if (! @ $count["$i"]) {
$count["$i"] = 0;
}
}
ksort($count);
print_r($count);
0170nobodyさん
2006/03/30(木) 00:14:03ID:???夜分遅くにアドバイスありがとうございます。
とりあえず、実装してみます。結果が出ましたらご報告させて頂きます。
本当にありがとうございます。
0172nobodyさん
2006/03/30(木) 03:39:49ID:D3mh+GN9テキストファイル(test.dat)
1=abc
2=def
3=ghi
があったとして
$str=file_get_contents("test.dat");
ereg('1=(.*)',$str,$reg);
print($reg[1]);
abcという結果を期待してるのだけど
abc 2=def 3=ghi
という結果になっちゃうんですが。
パターンを
1=(.*)\n
としても結果は同じになっちゃいます。
(.*)の中に途中の改行も入っちゃってる様子なんですが
どうしたらいいんでしょうか。
0176nobodyさん
2006/03/30(木) 09:07:15ID:rPy49/sd行単位で処理するならfile_get_contentsじゃなくてfile()で配列に読み込んだら
0177nobodyさん
2006/03/30(木) 10:11:55ID:???> パターンを
> 1=(.*)\n
> としても結果は同じになっちゃいます。
その場合の書き方は 1=(.*?)\n だ。
?をつけて最短マッチにさせないと、1番後ろの\nを探しにいってしまう。
0178nobodyさん
2006/03/30(木) 12:15:52ID:???/ :::::::。::::::;;;;;;>
/::::::::::::;;;www
)ヽ/ とノ (,,゚д゚)つ < みんなジョーズだな
メノ'\ /
U"U
0179nobodyさん
2006/03/30(木) 13:14:17ID:???>>177で答えは出てるが、別の点で。
ereg系関数は速度的に難があるから使わないほうがいい。
Perl互換正規表現関数のpreg系関数の方が10倍ほど高速。
あとはマニュアル参照
0180nobodyさん
2006/03/30(木) 13:26:32ID:???じゃ、俺も別の点で。
preg系のパターンではドットが改行を含まないのでpreg_match_all('/[0-9]+=(.*)/', $str, $m)あたりで意図した結果になるかな。
(逆に改行も含めたいときはsオプションで)
まあ>>172の言うように(特にpregを使うなら)fileやfgetsで一行ずつ処理するほうがやりやすい気はする。
■ このスレッドは過去ログ倉庫に格納されています