【PHP】下らねぇ質問はここに書き込みやがれpart18
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/03/15(水) 19:18:21ID:yiOrS10Nここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【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あたり
0653nobodyさん
2006/03/30(木) 16:39:19ID:???0655nobodyさん
2006/03/30(木) 16:54:04ID:???> ファイル数が多いので、便利なフリーの置換(grep)ソフトなどありましたら宜しくおながいします
sed
0656nobodyさん
2006/03/30(木) 17:12:35ID:???文字数が少ない
0657nobodyさん
2006/03/30(木) 17:43:57ID:???>この2つの関数では(1)のほうが推奨になったと思いますが、
特にそういうこともなかったと思うけど?
mysql_db*がmysql_db_*になったのは名称統一性のため。
>予めデータベース指定してサーバにクエリを送信することで、実行速度面がいいとか
やってることは、データベースを切り替え(共通)た後、クエリーを送信(共通)してるだけなので
他の単体機能の関数を組みせた場合と速度面で劇的な違いはない。
>ソフトなどありましたら
自分の開発環境(OS等)に合った別板スレにて。
0658nobodyさん
2006/03/30(木) 19:07:12ID:hmhd9dG6アパッチ入れたのはいいけどポートの設定ができません。80ではな8080にしたいのですけど教えてください。
0659nobodyさん
2006/03/30(木) 19:14:38ID:???httpd.conf => [Listen] & [ServerName]
判ったら、スレ違いだからカエレ!
0662nobodyさん
2006/03/31(金) 04:46:38ID:???is_alpha()やis_digit()のような文字・文字列の英数かどうかをシェックスる関数はないのでしょうか?
0664nobodyさん
2006/03/31(金) 05:37:58ID:???$len1=strlen($str);
$str=trim($str);
$len2=strlen($str);
ってすると、$len1と$len2の長さが同じになってしまいます。
単純に確保されたバイトサイズを返してるのかと思い。
$str2=trim($str);
unset($str);
$str=$str2;
unset($str2);
$len2=strlen($str);
ってやって、領域を確保しなおしても同じ結果です。
どうにかして空白スペース文きちんと減るようにしたいのですが・・・。
0665nobodyさん
2006/03/31(金) 05:57:36ID:???$len1=strlen($str);
print "<br>$len1";
$str=trim($str);
$len2=strlen($str);
print "<br>$len2";
何の問題も無く
4
3
って出るんだけど?
実は提示してるコードだけじゃない?
0666664
2006/03/31(金) 06:01:26ID:???その上の部分のコードが悪さしてました。
スレ汚しスマソ・・・
0667nobodyさん
2006/03/31(金) 06:03:41ID:???0668nobodyさん
NGNGregister_globalsをオフにしたら「$_FILES〜」に値が代入されなくなりました。
register_globalsがオンなら動作するんですが、オフのままではアップロードは不可能なんでしょうか?
PHPのバージョンは4.23です。
0669nobodyさん
2006/03/31(金) 08:00:28ID:???マニュアル読め
mysql_db_query
この関数は廃止予定です。使用しないでください。かわりに mysql_select_db() あるいは mysql_query() を使用してください。
0672nobodyさん
2006/03/31(金) 09:41:19ID:???hogehoge.html.phpに出力されるhtmlタグが
<img src="hogeimage.php">
になってればokでは
0673nobodyさん
2006/03/31(金) 10:50:46ID:???$array=array("a","b","c");等の配列があり
この配列の前2つの値が"a"と"b"ならtrueを返すにはどうしたらよいでしょうか?
array("a","c","e")は偽 array("a","b","d")は真
0674nobodyさん
2006/03/31(金) 10:59:42ID:???return list($k,$v) = each($a) && $v='a' && list($k,$v) = $each($b) && $v='b';
0677nobodyさん
2006/03/31(金) 13:37:51ID:3Hv4iuAGPHPで、サーバ上にあるファイルを操作するプログラムを書いているのですが、
その際ファイルそれぞれにユニークなIDを取得したく考えています。
例えば「test.jpg」というファイルがあれば、"test.jpg101250byte2005/03/04"あたりでMD5を取るという手もありますが、
更新日やファイル名が変更されても同じファイルからは同じIDを取りたいのですが、
何かいい方法はないでしょうか?
環境はLinux上のPHP4.4.1です。よろしくお願いします。
0680nobodyさん
2006/03/31(金) 15:27:56ID:???俺は昔 Perl やってたんで join() なんだが
0683nobodyさん
2006/03/31(金) 15:51:51ID:???joinだとsplitだよね
joinの方がタイプ数は少ないんだけどね
0684nobodyさん
2006/03/31(金) 17:31:44ID:???分かってて言ってるんだと思うけど、 split() と explode() は同じようで違うじゃん。
正規表現を使用しないなら explode() のほうが高速
0685nobodyさん
2006/03/31(金) 17:50:26ID:???$arr = split(" *, *", $str);
程度でもpreg_splitの方が速かったりするのか?
0686nobodyさん
2006/03/31(金) 17:59:27ID:???0687nobodyさん
2006/03/31(金) 19:50:42ID:???0688nobodyさん
2006/03/31(金) 19:55:41ID:???0689nobodyさん
2006/03/31(金) 21:57:55ID:???SQLインジェクションというのを気にして
mysql_real_escape_stringで入力値をエスケープしようと
mojaviのfilterで単純に
foreach($param as $key => $val)
{
$param[$key] = htmlspecialchars($param[$key]);
$param[$key] = mysql_real_escape_string($param[$key]);
}
という処理を入力値全部が通るようにして安心してたのですが
改行のあるデータ(掲示板記事など)では改行コードが
\r\nという文字列になってしまいます。
だからエスケープなんだといわれればそれまでなんですが
上の処理に改行コードだけは通すように書けますか?
よろしくお願いします。
0690nobodyさん
2006/03/31(金) 22:08:34ID:???書けますよ、と答える。
そもそもhtmlspecialcharsを通しておきながら、\r\nを残す意味は?
0692nobodyさん
2006/03/31(金) 23:03:20ID:???すいません、どういうふうに書きますか?
教えてください。
>そもそもhtmlspecialcharsを通しておきながら、\r\nを残す意味は?
htmlspecialcharsはhtmlタグをエスケープするだけじゃないですか?
mysql_real_escape_stringを通して\r\nを残す意味は
mysqlに収めるデータは他のシステムでも使えるように(web以外)
素の状態で収めておきたいからです。
>>691
表示はsmartyでやっています。
表示部はテンプレートで{$data.ddetail|nl2br}というように
nl2br修飾子を使って表示しています。
できれば表示部はこのままで行いたいと考えていますので
データベース入力前に素の形で突っ込めるような方向で考えてるわけです。
要は今までSQLインジェクションを気にしてなかったものに
mysql_real_escape_stringを採用した改造を行っていて
なるべく労力を減らそうとしています。
0693689
2006/03/31(金) 23:06:56ID:???$param[$key] = ereg_replace("\\r\\n", "\r\n", $param[$key]);
とか書いて戻そうとしましたが何の反応もありませんでした。
0694nobodyさん
2006/03/32(土) 00:42:56ID:???0695nobodyさん
2006/03/32(土) 02:12:58ID:???0696nobodyさん
2006/03/32(土) 02:37:49ID:???0697nobodyさん
2006/03/32(土) 07:16:06ID:???0698nobodyさん
2006/03/32(土) 07:20:56ID:???わざと「3/32」にしてるのね。
2chのバグかと思った。
0700nobodyさん
2006/03/32(土) 07:42:21ID:???http://headline.2ch.net/bbynews/
http://www.2ch.net/
にも説明あるし
0701nobodyさん
2006/03/32(土) 09:46:13ID:???この程度のネタの確証もてないレベルのヤツは2chくんなよ。
0703nobodyさん
2006/03/32(土) 14:04:29ID:???0704nobodyさん
2006/03/32(土) 15:20:28ID:yVRxItMU0705nobodyさん
2006/03/32(土) 15:27:40ID:???0706689
2006/03/32(土) 15:32:38ID:???アドバイスいただいた方ありがとうございました。
$param[$key] = ereg_replace("\\r\\n", "\r\n", $param[$key]);
↓
$param[$key] = str_replace("\\r\\n", "\r\n", $param[$key]);
0707nobodyさん
2006/03/32(土) 16:32:51ID:???誰も突っ込まないね。
0708nobodyさん
2006/03/32(土) 16:41:00ID:???0709nobodyさん
2006/03/32(土) 16:51:36ID:???0710nobodyさん
2006/03/32(土) 18:11:42ID:???0712nobodyさん
2006/03/32(土) 23:43:46ID:???最新の書き込み以外全部消えちまった。
ファイルロックもちゃんとしてたつもりなんだけど、
できてなかったって子とかな?それか他に考えられる原因ってある?
wで開いてたんだけど。
下らん質問でゴメン。
0714nobodyさん
2006/03/32(土) 23:59:55ID:???0715712
2006/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:???wで開いたってことは、それまでの書き込み+新規書き込みの両方を
まとめてファイルにwriteしてたんだろ?
それで最新以外は消えちゃった、って言うんなら書き込みじゃなく
元ファイルの読み込みに失敗してるんだよ。
0717712
2006/04/02(日) 00:27:44ID:???>wで開いたってことは、それまでの書き込み+新規書き込みの両方を
>まとめてファイルにwriteしてたんだろ?
そうです。説明不足でスミマセン。
なるほど。その線で調べてみます。
でも何度テストしてみても再現できないんだよなぁ・・・。
ありがとう。
0718nobodyさん
2006/04/02(日) 00:35:08ID:???$fp2ってどっから出てきたんだ。しかも第二引数なしのflockって…???
とりあえず、読み込みと書き込みの部分をfopenのとこから全部見せなきゃ
これで原因分かるやつは神がかってると思うぞ
DBでは普通に作れば壊れないが、下手な作り方すれば壊れるものが作れるかもな。
0719712
2006/04/02(日) 00:40:55ID:???$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:???0723nobodyさん
2006/04/02(日) 02:34:52ID:???表からは数百件程度の商品を検索とソート。
裏側からは画像とデータ登録の管理画面(登録、削除、修正、一覧)って構成なんだけど。
仕事ではないんで勉強をかねてやってみるんだけど、自分の技術じゃそこまで手に負えない。
お金をもらってその対策までするなら、最初からなんかあっても困らない作りにしておくのも悪くないかなとおもって。
もし入力値に対しての対策をするとしたら$_POSTと$_GETでのありえる(許せる)値をスクリプトの頭でチェックしてNGならエラーにしちゃうって処理でOK?
0724nobodyさん
2006/04/02(日) 02:40:33ID:???0727nobodyさん
2006/04/02(日) 13:03:49ID:???バナナ
りんご
みかん
が入っていたとして、これを$fruit[]に代入していきたいのですが、
どのようにすればいいのでしょうか?fopenでtest.txtを開いても
一行ずつ配列にいれる方法がわかりません。。
0728nobodyさん
2006/04/02(日) 13:39:10ID:???0730nobodyさん
2006/04/02(日) 14:24:51ID:???echo $a*$a;
みたいな事をすると
1.52415787807E+052などと省略(?)されて困っています
とりあえずphp.iniのそれっぽい値(precision = 12)を変更してみたのですが
17桁目辺りから00000000000000000000となってしまい、正しい値が得られません
へるぷみー
0731nobodyさん
2006/04/02(日) 14:48:41ID:???整数の扱える範囲(たいていのプラットフォームでは32ビット)を超えたものは浮動小数点数として扱われる。
そんな馬鹿でかい整数で演算する必要があるなら多倍長整数演算をサポートするライブラリ(bcmathやpearのMath_Integer)を使う。
0733nobodyさん
2006/04/02(日) 15:47:17ID:???0734nobodyさん
2006/04/02(日) 17:19:56ID:???0736nobodyさん
2006/04/02(日) 18:47:09ID:???$sql .= "VALUES ($rec['num'], '$rec['name']')";
の'$rec['name']'(文字列)をどのように書けばいいでしょうか。
上記だと通らないし、'{$rec['name']}'だと'が引っかかります。
'{$rec[name]}'もparse errorです。
DBはFirebirdで文字列は'でくくる固定のようです。
0737nobodyさん
2006/04/02(日) 18:52:59ID:???'$rec[name]'
または
'{$rec['name']}'
何でわざわざ都合の悪い組み合わせでだけ試そうとするのかその神経が理解できない。
0738nobodyさん
2006/04/02(日) 18:55:10ID:???じゃ、ダメなんか
っていうかSQLがおかしいんじゃね、それ
firebird触ったことないから分からんけど
DBエラーならエラーを全部張ってみそ
とにかくエラーが出てるんならエラーを張ってみては
0739nobodyさん
2006/04/02(日) 18:58:54ID:???0741738
2006/04/02(日) 18:59:59ID:???しかもSQL文は大丈夫か
postgreばっかなんで方言が身についてた
0743723
2006/04/02(日) 19:04:30ID:???$_GET['orderby']
って変数を使ったりします。
こんな感じで一つ一つに対してチェックをしなくちゃならんのですよね?
$_GET
$_POST
をまとめてチェックとか出来たらいいのに。
ところで、小さなサイトでつついたところで面白いものが出て来そうもないところに対して、実際に、sqlインジェクションをするために$_GETや$_POSTで変な値を入れるってよくあることなんでしょうか?
0745723
2006/04/02(日) 19:09:21ID:???なるほど、$_REQUESTに対して、最悪入っていてはまずい文字列が入っていたらクエリ実行せずにたたき落とすって感じ?
case文のdefaultに飛ばすとか。
0747nobodyさん
2006/04/02(日) 19:37:05ID:???変なところでバグが出たりする(してはならないクエリも処理しちゃったり)
かと言って必要な場所で毎回必要な処理をするのも、
万一忘れたら話にならんし・・・難しいね
0748723
2006/04/02(日) 19:42:09ID:???まずい値をスクリプトの側で補正したり、値に対して個別のエラーメッセージを出したりしようとしなければそんなに大変じゃない気がして来た。
よく考えたら、そんなイタズラをする相手に対してそんな丁寧なインターフェイスを用意する必要なんてないもんな。
ループでまわして、問題があれば$errflag++して、ループがおわったところで$errflag>0だったらcaseのdefaultに飛ばす。
って感じでいいのかな。
この辺の入力値をまとめた配列に対してまとめて処理するってあたりは、ネットでさがしてもあんまり情報ない希ガス。どういうわけか。
一概にこうすればいい、って書きにくいものなのかもしれないけど。
0749723
2006/04/02(日) 19:46:16ID:???>>748を書いてる間にレスがあったみたいですね。
たしかにそうですね。
それぞれの変数について、sqlに突っ込む直前にっていうのが正しいのかもしれないけど、自分のようなスパゲッティソース書く奴にはとても手に負えないことになってしまいそうです。
やっぱり無理そうな気がして来たorz
0750nobodyさん
2006/04/02(日) 19:47:14ID:dnNED4Rvボタンを押した後、画面に文字を表示させ、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:???0752750
2006/04/02(日) 20:20:21ID:???echo '<html><head>';
echo '</head><body>処理中です。</body></html>';
sleep(1);
header ("Location:指定のURL");
で試してみましたが文字は表示されないようです。
(1秒待ってリダイレクトされます)
■ このスレッドは過去ログ倉庫に格納されています