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

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

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

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

本スレ【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/

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

過去スレは>>2-3あたり
0709nobodyさん2006/03/32(土) 16:51:36ID:???
ファイルのは抜きですすいません。
0710nobodyさん2006/03/32(土) 18:11:42ID:???
関係ないけど、PHPのロゴが犬になってて一瞬不正アクセスされた思ってめちゃ焦ったよ
0711nobodyさん2006/03/32(土) 23:07:17ID:???
>>710
毎年お馴染み
0712nobodyさん2006/03/32(土) 23:43:46ID:???
掲示板作って、ログはファイルに書き込んでたんだけど、
最新の書き込み以外全部消えちまった。
ファイルロックもちゃんとしてたつもりなんだけど、
できてなかったって子とかな?それか他に考えられる原因ってある?
wで開いてたんだけど。
下らん質問でゴメン。
0713nobodyさん2006/03/32(土) 23:53:29ID:???
>>712
読み込み、書き込み、ファイルロック関係のソースを全部晒してみろ。
0714nobodyさん2006/03/32(土) 23:59:55ID:???
DBを使えば解決
07157122006/04/02(日) 00:07:25ID:???
//書き込み
flock($fp,2);
foreach($lis as $li) fputs($fp, $li);
flock($fp,LOCK_UN);
fclose($fp);

読み込みはfile()使って二次元配列に入れて
ページ処理入れつつfor文で繰り返し表示してます。

>>714
実は今までDBでしかやったことなくて今回ファイルで初めて作ってみました。
DBでもちゃんとしないと壊れちゃうことあるんじゃないの?
0716nobodyさん2006/04/02(日) 00:23:15ID:???
>>712>>715
wで開いたってことは、それまでの書き込み+新規書き込みの両方を
まとめてファイルにwriteしてたんだろ?
それで最新以外は消えちゃった、って言うんなら書き込みじゃなく
元ファイルの読み込みに失敗してるんだよ。
07177122006/04/02(日) 00:27:44ID:???
>>716
>wで開いたってことは、それまでの書き込み+新規書き込みの両方を
>まとめてファイルにwriteしてたんだろ?
そうです。説明不足でスミマセン。
なるほど。その線で調べてみます。
でも何度テストしてみても再現できないんだよなぁ・・・。
ありがとう。
0718nobodyさん2006/04/02(日) 00:35:08ID:???
>>715
$fp2ってどっから出てきたんだ。しかも第二引数なしのflockって…???
とりあえず、読み込みと書き込みの部分をfopenのとこから全部見せなきゃ
これで原因分かるやつは神がかってると思うぞ

DBでは普通に作れば壊れないが、下手な作り方すれば壊れるものが作れるかもな。
07197122006/04/02(日) 00:40:55ID:???
>>718
$fp2じゃなくって$fp,2だよ。コンマ入ってる。
2はLOCK_EXと同意。

今ログもう一度確認したら最終書き込みの人の
$_SERVER["REMOTE_ADDR"]で取得したはずのIPアドレスがない・・・。
何か関係あるんでしょうか。
0720nobodyさん2006/04/02(日) 01:47:28ID:???
そんな断片情報で分かってたまるか
0721nobodyさん2006/04/02(日) 01:54:05ID:???
単に処理の途中で変数消しちゃってるだけじゃないのか
0722nobodyさん2006/04/02(日) 01:55:06ID:???
まぁ、DB使ってて「ちゃんとやらないと」データ壊すような人だし。
0723nobodyさん2006/04/02(日) 02:34:52ID:???
phpとmysqlでちょっとしたシステムを頼まれたんだけど、最悪DBの中身が漏れて困る様なものではない&外からの悪意のある操作でDBが消えても困らない、ってもんだったら、入力値のチェックって不要?
表からは数百件程度の商品を検索とソート。
裏側からは画像とデータ登録の管理画面(登録、削除、修正、一覧)って構成なんだけど。
仕事ではないんで勉強をかねてやってみるんだけど、自分の技術じゃそこまで手に負えない。
お金をもらってその対策までするなら、最初からなんかあっても困らない作りにしておくのも悪くないかなとおもって。

もし入力値に対しての対策をするとしたら$_POSTと$_GETでのありえる(許せる)値をスクリプトの頭でチェックしてNGならエラーにしちゃうって処理でOK?
0724nobodyさん2006/04/02(日) 02:40:33ID:???
入力データをSQLに入れるときに全部mysql_escape_string()しとくだけで最低限は十分。
0725nobodyさん2006/04/02(日) 03:13:05ID:???
>>719
PHPのバージョンが4とか言うなよ
0726nobodyさん2006/04/02(日) 09:54:30ID:???
>>723
最低限、SQLインジェクション、クロスサイトスクリプティングの
対策はしたほうがいいような。
0727nobodyさん2006/04/02(日) 13:03:49ID:???
test.txtに

バナナ
りんご
みかん

が入っていたとして、これを$fruit[]に代入していきたいのですが、
どのようにすればいいのでしょうか?fopenでtest.txtを開いても
一行ずつ配列にいれる方法がわかりません。。
0728nobodyさん2006/04/02(日) 13:39:10ID:???
PHPのリファレンス本読めばサンプルコードが沢山書いてあるのに
0729nobodyさん2006/04/02(日) 13:54:46ID:???
>>727
あのね、これで一撃なんですよ。
$fruit = file(〜);
0730nobodyさん2006/04/02(日) 14:24:51ID:???
$a=123456789123456789123456789;
echo $a*$a;

みたいな事をすると
1.52415787807E+052などと省略(?)されて困っています
とりあえずphp.iniのそれっぽい値(precision = 12)を変更してみたのですが
17桁目辺りから00000000000000000000となってしまい、正しい値が得られません
へるぷみー
0731nobodyさん2006/04/02(日) 14:48:41ID:???
>>730
整数の扱える範囲(たいていのプラットフォームでは32ビット)を超えたものは浮動小数点数として扱われる。
そんな馬鹿でかい整数で演算する必要があるなら多倍長整数演算をサポートするライブラリ(bcmathやpearのMath_Integer)を使う。
0732nobodyさん2006/04/02(日) 15:31:55ID:???
>>723
そういう最低限のところは癖にしとかんと、他で墓穴ほるぞ
0733nobodyさん2006/04/02(日) 15:47:17ID:???
どこまでが最低限なんだか…
0734nobodyさん2006/04/02(日) 17:19:56ID:???
回答者が最低限だと思ったらじゃないかな。
0735nobodyさん2006/04/02(日) 17:24:15ID:???
>>731
ありがとう!サム!
0736nobodyさん2006/04/02(日) 18:47:09ID:???
$sql = "INSERT INTO TABLENAME (NUM, NAME) ";
$sql .= "VALUES ($rec['num'], '$rec['name']')";
の'$rec['name']'(文字列)をどのように書けばいいでしょうか。
上記だと通らないし、'{$rec['name']}'だと'が引っかかります。
'{$rec[name]}'もparse errorです。
DBはFirebirdで文字列は'でくくる固定のようです。
0737nobodyさん2006/04/02(日) 18:52:59ID:???
>>736
'$rec[name]'
または
'{$rec['name']}'

何でわざわざ都合の悪い組み合わせでだけ試そうとするのかその神経が理解できない。
0738nobodyさん2006/04/02(日) 18:55:10ID:???
$rec[num], $rec[name]
じゃ、ダメなんか

っていうかSQLがおかしいんじゃね、それ
firebird触ったことないから分からんけど

DBエラーならエラーを全部張ってみそ
とにかくエラーが出てるんならエラーを張ってみては
0739nobodyさん2006/04/02(日) 18:58:54ID:???
nameがvarcharなんでそ
0740nobodyさん2006/04/02(日) 18:59:28ID:???
>>738
firebirdに限らず、文字列をクオートしないで渡せるDBなんてあるのかよ。
07417382006/04/02(日) 18:59:59ID:???
やべ、かぶった

しかもSQL文は大丈夫か
postgreばっかなんで方言が身についてた
0742nobodyさん2006/04/02(日) 19:00:44ID:???
>>736
それ、name側じゃなくnum側がエラーになってるだろう。
07437232006/04/02(日) 19:04:30ID:???
たとえば、ソートひとつするんでも
$_GET['orderby']
って変数を使ったりします。
こんな感じで一つ一つに対してチェックをしなくちゃならんのですよね?
$_GET
$_POST
をまとめてチェックとか出来たらいいのに。

ところで、小さなサイトでつついたところで面白いものが出て来そうもないところに対して、実際に、sqlインジェクションをするために$_GETや$_POSTで変な値を入れるってよくあることなんでしょうか?
0744nobodyさん2006/04/02(日) 19:05:31ID:???
>>743
$_REQUEST
07457232006/04/02(日) 19:09:21ID:???
>>744
なるほど、$_REQUESTに対して、最悪入っていてはまずい文字列が入っていたらクエリ実行せずにたたき落とすって感じ?
case文のdefaultに飛ばすとか。
0746nobodyさん2006/04/02(日) 19:10:57ID:???
>>743
foreachで回すかarray_mapとかで配列を一括チェックしちゃえば?
0747nobodyさん2006/04/02(日) 19:37:05ID:???
しかし最初に全部のクエリにその手の処理をしちゃうと、
変なところでバグが出たりする(してはならないクエリも処理しちゃったり)
かと言って必要な場所で毎回必要な処理をするのも、
万一忘れたら話にならんし・・・難しいね
07487232006/04/02(日) 19:42:09ID:???
>>746
まずい値をスクリプトの側で補正したり、値に対して個別のエラーメッセージを出したりしようとしなければそんなに大変じゃない気がして来た。
よく考えたら、そんなイタズラをする相手に対してそんな丁寧なインターフェイスを用意する必要なんてないもんな。
ループでまわして、問題があれば$errflag++して、ループがおわったところで$errflag>0だったらcaseのdefaultに飛ばす。
って感じでいいのかな。
この辺の入力値をまとめた配列に対してまとめて処理するってあたりは、ネットでさがしてもあんまり情報ない希ガス。どういうわけか。
一概にこうすればいい、って書きにくいものなのかもしれないけど。
07497232006/04/02(日) 19:46:16ID:???
>>747
>>748を書いてる間にレスがあったみたいですね。
たしかにそうですね。
それぞれの変数について、sqlに突っ込む直前にっていうのが正しいのかもしれないけど、自分のようなスパゲッティソース書く奴にはとても手に負えないことになってしまいそうです。
やっぱり無理そうな気がして来たorz
0750nobodyさん2006/04/02(日) 19:47:14ID:dnNED4Rv
php4での質問です。
ボタンを押した後、画面に文字を表示させ、1秒待った後に該当のURLを表示する
という処理をしたいのですが、ボタンを押したあとのfunction内で

echo '<html><head>';
echo '<META HTTP-EQUIV="refresh\" content="1;URL=指定のアドレス">';
echo '</head><body>処理中です。</body></html>';

のようにすれば簡単に実現できます。
しかしこの場合、FireFoxなどのブラウザではRefererが取得できません。

header ("Location:指定のURL");

を用いればRefererを取得できるのですが今度は文字を表示できません。
具体的には次のようにしていますが文字が表示されません。

echo '<html><head>';
echo '</head><body>処理中です。</body></html>';
header ("Location:指定のURL",microtime(1000));

何か良い方法はないでしょうか?
0751nobodyさん2006/04/02(日) 20:09:50ID:???
sleep
07527502006/04/02(日) 20:20:21ID:???
>>751

echo '<html><head>';
echo '</head><body>処理中です。</body></html>';
sleep(1);
header ("Location:指定のURL");

で試してみましたが文字は表示されないようです。
(1秒待ってリダイレクトされます)
0753nobodyさん2006/04/02(日) 20:22:43ID:???
>>752
javascriptは?
0754nobodyさん2006/04/02(日) 20:27:10ID:???
>>749
スパゲッティソースはどんな場面でも効率よく開発なんてできないんだから諦めれ
07557502006/04/02(日) 20:27:30ID:???
>>753
javascriptにすると今度はIEでRefererが取得できなくなるようです。
0756nobodyさん2006/04/02(日) 21:28:12ID:???
>>750
>echo '<META HTTP-EQUIV="refresh\" content="1;URL=指定のアドレス">';
ここで指定したアドレス にリファラ情報を含ませて受け取り側で処理する。

厳密な意味でのリファラを出す出さないは、クライアント次第なので
別のサイト間では"リファラ"がないことを当たり前として作るもの。
0757nobodyさん2006/04/02(日) 21:31:26ID:???
クッキーもしくはセッションにReferer文字列を保存しといて
METAのRefreshかJavaScriptのSetTimeout+locarion.hrefでジャンプが楽。
クッキーとかを使いたくないのであればRefresh他の飛び先にパラメータで
Referer文字列を渡してしまう。

基本的に画面遷移を従った状態で前のページのRefererを保持させるのは
ブラウザ依存になってしまうので無理と考え、何らかの形でデータ記録する
方法を検討しないとダメと考えるべき。
0758nobodyさん2006/04/02(日) 21:31:49ID:???
あと
|echo '<html><head>';
|echo '</head><body>処理中です。</body></html>';
|header ("Location:指定のURL",microtime(1000));
こいうのは、試してみるまでもなく駄目だって気づこうぜ。
# HTTPのレスポンスを調べて理解
0759nobodyさん2006/04/02(日) 22:03:08ID:???
>>750
> しかしこの場合、FireFoxなどのブラウザではRefererが取得できません。
適当なこと言わないで下さい。
FirefoxはデフォルトでReferarをちゃんと送信します。
(IEと同じく設定の書き換えで無効にできますが。)

むしろ、IEはバグで他のサイトのReferarを送信したり正しく送信されなかったりすることがあるようです。
特にIE5.5はReferar関係にバグありまくりです。
0760nobodyさん2006/04/02(日) 22:07:17ID:???
>>759
Refreshでページ遷移するとRefresh元のページがREFERERとして
渡されてきてしまう、って話だろ?ごく普通の動きだと思われるが。
読解力ないやつだな。
0761nobodyさん2006/04/02(日) 22:08:19ID:???
転送先のURLをGETメソッドで渡すのは確かに難しいですね。

http://mydomain.com/hogehoge.php?page=login というURLがあって、ログイン完了後に、ログイン名に表示したURL
http://mydomain.com/mypage.php?id=foo&mem=on にリダイレクトしたい場合とかで、

http://mydomain.com/hogehoge.php?page=login&redirect=http://mydomain.com/mypage.php?id=foo&mem=on とやってしまうと、
$_GET['redirect']に収納されるのは、「http://mydomain.com/mypage.php?id=foo」までとなってしまうし。

?や&を独自の方式でエスケープ処理をしてあとで復号するのがいいかと思います。
もしくは、Cookieなどに保存するかPOSTを使う。
07627592006/04/02(日) 22:11:08ID:???
>>760
> Refresh元のページがREFERERとして渡されてきてしまう
それがRFC通りの正しい Refererの実装なわけですが。

「しかしこの場合、FireFoxなどのブラウザではRefererが取得できません。」と書かれているよね。
想定外のReferarが渡される、って表現ならわかるけど、取得できないってことは一切送信されてないってことだ。

正確でない表現をすると回答者を混乱させるだけ。

0763nobodyさん2006/04/02(日) 22:16:33ID:???
>>761
独自っつーか、パラメータに渡す文字列は必ずurlencodeするのがお約束だと思うんだが。
0764nobodyさん2006/04/02(日) 22:17:29ID:???
>>762
くだらない質問スレで正確な言葉を使った説明なんて期待する方がバカじゃん
07657502006/04/02(日) 22:28:48ID:???
ちょっと説明不足だったようで申し訳ない。
.htaccessを使用して同じドメイン内でしか移動できない(直リンできない)設定をしています。
このため、どこかにRefererを格納しておくというような手段は使えないように思います。
FireFoxで
<META HTTP-EQUIV="refresh\" content="1;URL=指定のアドレス">
でもRefererを吐き出すようにできるプラグインか設定(はなかったはず)があればいいのですが
判明しているのは
header ("Location:指定のURL");
ではRefererを吐き出せる(ページ内のリンク先に正常に飛べる)ということだけです。

>>759
<META HTTP-EQUIV="refresh\" content="1;URL=指定のアドレス">
を使用した場合、残念ながらFireFoxではRefererを吐き出しません。
ttp://www.teria.com/~koseki/memo/referrer/
で実際に確認できますよ。
0766nobodyさん2006/04/02(日) 22:46:46ID:???
>>765
> このため、どこかにRefererを格納しておくというような手段は使えないように思います。
意味不明。クッキーやセッションやパラメータ使ってのデータ保持くらい普通にできるだろ。

> を使用した場合、残念ながらFireFoxではRefererを吐き出しません。
それがブラウザの正しい仕様じゃないの?
07677502006/04/02(日) 22:58:47ID:???
>>766
それはリファラを利用したアクセス制限は一般的ではないということでしょうか?

>>クッキーやセッションやパラメータ使ってのデータ保持くらい普通にできるだろ。
データ保持は可能ですが、これをブラウザ(または環境変数)にセットするということですか?

.htaccessで指定したものの実行順序はよくわかりませんがブラウザでアクセスした際に
アクセス元のブラウザの環境変数(リファラ)を参照して制限しているのではないのですか。
それだと保持したデータを渡すのはどのタイミングになるのでしょうか。
0768nobodyさん2006/04/02(日) 23:07:46ID:???
いまどき、REFERER使ったアクセス制限なんて普通やらないだろ。
REFERERを返さない設定のブラウザまたはセキュリティソフト多すぎ。
0769nobodyさん2006/04/02(日) 23:13:50ID:???
>>765
そういう用途なら普通にCookieに許可符を持たせればいいんでないの。
Cookieが駄目ならURLに付加してもいい。
誰かも言ってたけど、セッションでやるっつうこと。
0770nobodyさん2006/04/02(日) 23:14:53ID:???
>>767
アクセス制限だけが目的ならRefresh前のページで弾かれてるだろうから
Refresh後にはREFERERが取得できなくても問題ないんじゃないか?
REFERERが取得できないブラウザを全部弾いてるんだと弾きすぎだろうし。
0771nobodyさん2006/04/02(日) 23:51:44ID:???
REFERERチェックしないとセッションハイジャックができちゃうよ。
0772nobodyさん2006/04/02(日) 23:58:10ID:???
( ゜A ゜)
0773nobodyさん2006/04/03(月) 00:10:52ID:???
( ゜д゜)
0774nobodyさん2006/04/03(月) 00:11:24ID:???
脆弱性対策はアホでもできるがアホにはできないといういい例かね >>771
0775nobodyさん2006/04/03(月) 00:17:00ID:???
IEとfirefoxで違う方法で成功してるんなら、ブラウザによって違う処理すればいいんじゃね
他のブラウザも含みたいんなら知らんけど
07767502006/04/03(月) 00:22:26ID:???
>>775
FireFoxとそれ以外で処理を分けるようにします。
アドバイスありがとうございました。
0777nobodyさん2006/04/03(月) 01:33:07ID:???
test.csvの一行目のファイルが
"1","あああ"

だとします。読み込みは>>729を参考にしたらできたのですが、
このうち「あああ」の方だけを取り出すのはどうしたらいいのでしょうか?
fputsの反対?
0778nobodyさん2006/04/03(月) 01:44:54ID:???
>>777
fgetcsv()
ただ、日本語データを含む場合はこける可能性が高いのであまりお勧めしない。

真面目にやると複雑な正規表現を使うか複雑な文字列編集が必要になるので結構面倒。
というか君、ひょっとしてマニュアルの類を全然読んでないの?
0779nobodyさん2006/04/03(月) 01:46:39ID:???
リファラーもクッキーも偽造可能なんだけどね。
限界がある事は知っておいた方がいいよ。
0780nobodyさん2006/04/03(月) 02:20:21ID:???
エラーの拾い方について質問です。

$fp = fopen($logpath, "a");
flock($fp, LOCK_EX);
  fputs ($fp, "$hoge2<>$hoge1\r\n");
flock($fp, LOCK_UN);
fclose ($fp);

このようにファイルに文字列を書き込む際、何らかのエラーが出て書き込めなく
なる場合が出てくると思います。その際、

if (エラーがでたとき) {
  print("エラーがでたので書き込めませんでした");
} else {
  print("書き込めました");
}

という風にしたいのですが、どのようにエラーを拾えば良いでしょうか。
0781nobodyさん2006/04/03(月) 02:58:48ID:???
ああああis_readableとかマニュアルに書いてありますね。
これでエラーを拾えるのか。ありがとうございました。
0782nobodyさん2006/04/03(月) 02:59:11ID:???
>>780
$err = 1;
if($fp = fopen($logpath, "a")) {
  $err = 0;
  flock($fp, LOCK_EX);
  if(fputs ($fp, "$hoge2<>$hoge1\r\n") === FALSE) {
    $err = 1;
  }
  flock($fp, LOCK_UN);
  fclose ($fp);
}
if($err) {
  print("エラーがでたので書き込めませんでした");
} else {
  print("書き込めました");
}
とかでいいんじゃないの。迷うようなもの?
0783nobodyさん2006/04/03(月) 09:17:10ID:???
drupalでログイン状態が保たれている仕組みをお教え下さい
drupla等の会員登録が必要なサイトで一度ログインすると、一度ブラウザを閉じてもサイド訪問するとログインした状態が保たれます。
これはどのような仕組みを使っているのでしょうか。

cookieを見るとセッションIDは使用しているようですが、セッションIDでは一度ブラウザを閉じると情報は保持されないですよね・・
0784nobodyさん2006/04/03(月) 09:20:07ID:???
>>783
セッションIDとともにデータベースにセッション情報を保存しとけば
いいのでは?
07857832006/04/03(月) 09:25:21ID:omuaP2sq
>>784
おへんじありがとうございます
セッション情報は/tmpに格納されているものだと考えていますが。
保存先をDBに変える方法があるのでしょうか、それとも/tmpから情報を読み取りDBに放り込むのでしょうか。
07867832006/04/03(月) 09:33:47ID:omuaP2sq
頂いた情報を調べたところ
session_pgsql
というものもあるみたいですね、一般的には皆さんどうやってるんでしょうか
07877832006/04/03(月) 09:36:36ID:???
すいません連続で書いてしまって・・
session_encode
でDBに格納するのかな・・
07887832006/04/03(月) 09:51:40ID:omuaP2sq
>>784
分かりました、セッションidをクッキーに保存しておき、そのセッションidが入ったクッキーを持っているユーザがアクセスしたら、クッキーからユーザを特定してログインさせるって事ですね。

無駄に連続書きこしてすいません・・
omu
0789nobodyさん2006/04/03(月) 11:41:02ID:OZZpUwYy
実行ユーザーの取得はできないでしょうか?
get_current_user がソレかと思いきや、これはスクリプトの所有者のようです。
そうではなく、実行しているユーザーが取得したいです。
getenv('USER') を試したのですが、これは場合によってはうまく取得できません。
0790nobodyさん2006/04/03(月) 14:32:48ID:???
>>789
posix_getuid()はだめ?名前の通りposix関数だから、winな環境だとどう動くか知らんけど。
0791nobodyさん2006/04/03(月) 14:38:51ID:???
GDライブラリを使って
動的にテキストのjpg画像データを吐き出して遊んでいるのですが、
フォントがttfしか使えないようです。
どうにかしてOpenTypeFontを使用することはできませんでしょうか。
0792nobodyさん2006/04/03(月) 17:48:08ID:???
system('who am i');
0793nobodyさん2006/04/03(月) 21:10:35ID:???
二次元配列 一部分だけソートして表示したかったので
以下のようなものを作りました

$data_array = array(array(2,3,4,5),array(1,4,6,4),array(3,5,2,6);
$sort = 3;

//こっから
$n=count($data_array);
for($i=0;$i<$n;$i++){
$temp[$i] = $data_array[$i][$sort];
}
asort($temp);
$key = array_keys($temp);
//ここまで

for($i=0;$i<$n;$i++){
echo $data_array[$key[$i]][0];
}

が、もっと簡単に上記と同じような事ができる関数は無いでしょうか?
0794nobodyさん2006/04/03(月) 21:20:11ID:???
>>793
こういうこと?
$data_array = array(array(2,3,4,5),array(1,4,6,4),array(3,5,2,6));
$sort = 3;

usort($data_array, create_function('$a,$b', 'return $a[$GLOBALS["sort"]] - $b[$GLOBALS["sort"]];'));
foreach($data_array as $d) {
echo $d[0];
}
0795nobodyさん2006/04/03(月) 21:54:56ID:???
>>794
専用の関数のようなものがあって
それを通せばいいというわけには行かなさそうですね
でも私の作成したものよりすっきりしてるの
793さんの物を使用したいと思います
ありがとうございます
0796nobodyさん2006/04/03(月) 22:19:19ID:???
>>795
該当の関数もあるにはある。
$data_array = array(array(2,3,4,5),array(1,4,6,4),array(3,5,2,6));
$sort = 3;

foreach($data_array as $d) $s[] = $d[$sort];
array_multisort($s, SORT_ASC, SORT_NUMERIC, $data_array);
foreach($data_array as $d) {
echo $d[0];
}
0797nobodyさん2006/04/03(月) 22:19:59ID:8XacjkZy
$_POST["変数名"]で受け取る変数名にdata$iなどの変数まじりの変数名を
を受け渡すにはどのように記述すればよいのでしょうか?
0798nobodyさん2006/04/03(月) 22:21:33ID:???
>>797
$_POST["data$i"]
0799nobodyさん2006/04/03(月) 22:29:54ID:???
ちとワロタ
08007972006/04/03(月) 22:33:16ID:???
ハウッ!
ありがとうございましたTT
0801nobodyさん2006/04/03(月) 22:34:32ID:???
$_POST['data$i']
こう書いて詰まっていたと予想するがどうか?
08027892006/04/03(月) 22:45:00ID:???
>>790
そんなのがあるんですね。ユーザIDはちゃんと取れてるような気がします。
posix_getpwuid と組み合わせていい感じな気がします。
ありがとうございます。

>>792
最後の手段として、その手は考えていました。
でもなんとかなりそうでよかったです。
08037972006/04/03(月) 22:45:47ID:???
for($i=0;$i==15;$i++)
{$newdata .= "," . $_POST["data$i"];}
print $newdata;

とCSVファイル作りたかったんですが、何故か$newdataが空で・・^^;
原因が$_POSTにあるのかと思った次第です^^;
まだ原因わかってません・・・orz
0804nobodyさん2006/04/03(月) 22:48:44ID:???
$i==15?
0805nobodyさん2006/04/03(月) 22:51:11ID:irtGsMB0
よくあるテクニックですが、起こったエラーに応じて変数に数字を代入し、
ビット演算で起こったエラーを調べるスクリプトを作っています。

$errには起こったエラーに応じて、1,2,4,8 のいずれかを組み合わた和が代入されています。
以下のコードでどのエラーが起こったか分かるのですが、これですと無駄が多いような気がします。

if($err&1) echo err1;
if($err&2) echo err2;
if($err&4) echo err4;
if($err&8) echo err8;

switchで簡略化できないかと思ったのですが、switchでは
if($err==1)と同じ動作はできますが、(switch($err){case 1:})
if($err&1)のように、"=="以外の演算子では処理できませんよね?

とにかくもっと簡略化したいのです。代替案でも構いませんので、どなたか御指南下さい。
また、説明が分かり難ければその旨をお伝え下さい。
宜しくお願いいたします。
08067972006/04/03(月) 22:54:15ID:???
アリガトウございました。
深く反省しております 。・゚・(ノД`)・゚・。
0807nobodyさん2006/04/03(月) 23:04:32ID:???
>>805
そもそも、1、2、4、8の和が入ってる=複数のエラーメッセージを出す必要がある、んだから
switchじゃ代替になってないじゃん。
foreach(array(1,2,4,8) as $b) if($err & $b) echo $err[$b];
辺りじゃない?
0808nobodyさん2006/04/03(月) 23:50:03ID:???
くだらねえ質問なんだが

ereg("[0-9a-zA-Z]{32}", $str)

これは$strが大文字小文字のアルファベットと数字のみで構成され、32文字ぴったりの時のみTRUEを期待してるんだが、
どうも32文字「以上」でもTRUEになってしまう。

書き方違うのか!?教えてくれ!
0809nobodyさん2006/04/03(月) 23:55:43ID:???
自己解決した!
32文字ぴったりで一致する文字列が「$str に含まれていると」TRUEなのか!
畜生!
■ このスレッドは過去ログ倉庫に格納されています