【PHP】下らねぇ質問はここに書き込みやがれpart10
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/09/25(日) 02:03:45ID:nLUfPXhDここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
【PHP】くだらねぇ質問はここに書き込みやがれpart8
http://pc8.2ch.net/test/read.cgi/php/1123431535/
【PHP】くだらねぇ質問はここに書き込みやがれpart9
http://pc8.2ch.net/test/read.cgi/php/1125716012/
0175nobodyさん
2005/09/29(木) 17:35:25ID:???GDライブラリを使って画像出力をしてます。
沢山の図形や線を様々な色を使って描画するのですが、
一定数以上の図形を出力すると、
図形そのものは表示されるのですが図形の色が途中から全て同じになります。
phpの初期設定周りが原因なのでしょうか。解決出来ず困っています。
0176nobodyさん
2005/09/29(木) 17:52:56ID:???0177nobodyさん
2005/09/29(木) 18:07:21ID:???それも疑ったんですが、結構積んでるのでその心配はないかと。
CGIとして動かしてるので、
apacheとか別の所で引っかかってるんでしょうか...。
0178nobodyさん
2005/09/29(木) 18:35:39ID:???メモリ積んでてもphp.iniで制限してたら意味なし
memory_limit = 500M
とかやっとけ
0179nobodyさん
2005/09/29(木) 18:48:29ID:???くだらない質問じゃないから、も少し詳しい状況と
実際に使ってる環境とスクリプトソースをMLに投げたら?
ここでもいいけど追試してくれる母数が大きいところで調べた方がいいと思う。
0180nobodyさん
2005/09/29(木) 18:48:39ID:6Acw6xK3$val_tmp2 = 'ポストする文字列
項目1(タブ)項目2
111(タブ)222';
$val_tmp2 = urlencode($val_tmp2);
$val_length = strlen( $val_tmp2 );
$val_tmp1 ='POST /recive.cgi HTTP/1.0
Content-Type: text/csv
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: hoge.hage.com
content-length:' . $val_length';
$val_out = $val_tmp1 . "\n\n" . $val_tmp2;
$val_sock = fsockopen( 'host_name', 80, $val_error_no, $val_error_msg, 120 );
if( $val_sock == false ){
print "bom1<BR>\n";
exit( 1 );
}
$val_ret = fwrite( $val_sock, $val_out );
fclose( $val_sock );
としたのですが、どうしてもval_tmp2の値が受け側で取得できません(それ以外はOKでした)
どのようにしたら取得できるでしょうか?
0182nobodyさん
2005/09/29(木) 19:01:00ID:???> $val_out = $val_tmp1 . "\n\n" . $val_tmp2;
ここの\n\nでHTTPヘッダが終了してるんじゃないの?
0183nobodyさん
2005/09/29(木) 19:05:31ID:???PHPで受け取るならname=value&name1=value1の形式で
Content-type: application/x-www-urlencoded
がないと$_POSTには入らない
で$_POSTになければ$HTTP_RAW_POST_DATAを見てみたらあるかも
0184nobodyさん
2005/09/29(木) 19:54:27ID:???だった
0185180
2005/09/29(木) 19:58:12ID:???ありがとうございます。
しかしダメでした…
調べたところ、STDINには入っているので、最悪そちらを使えばいいかなとも思っています。
しかし正常に動かないのは癪なので、もしわかる方がいたら教えてください。
0186nobodyさん
2005/09/29(木) 20:14:21ID:???reciev.cgiはPHPなのか
PHPならContent-typeがapplication/x-www-form-urlencodedかmultipart/formdata以外のときは$HTTP_RAW_POST_DATAにPOSTデータが入る。
application/x-www-form-urlencodedかmultipart/formdataのときはその仕様に合ったデータじゃないとダメ
Perlなら何も考えずSTDINから読み込めばいい
0187180
2005/09/29(木) 21:10:24ID:???失礼しました、中身はphpです。
で、cgiとして動かしたところ、HTTP_RAW_POST_DATAがどうしてもとれませんでした。
cgiでは無く、phpとして動かすとなんの問題も無く取れたのですが…。
もしかしたらサーバの設定とかそういう話なのかな、と思ったのですが、
ちょっと今のところわからないので、とりあえず保留にしました。
しかしどうにかデータの取得自体は出来たので、なんとかなりそうです。
ありがとうございました!
0188nobodyさん
2005/09/29(木) 22:33:47ID:???sample.phpに
switch ($_GET['id']) {
case "1" : $sql="WHERE id=1";break;
case "2" : $sql="WHERE id=2";break;
case "3" : $sql="WHERE id=3";break;
default : $sql="";
と記述してあるとします。
この時、ブラウザからhttp://〜/sample.php?id=2と入力すると、
idが2のデータが出力されますよね。
上記の例の様に3件程度ならcase文でも構わないのですが、
仮に300件とかある場合、case文で300行書くのは非効率の様に思えます。
ここのidの部分を動的に変更する事は出来るのでしょうか?
例えば
if($_GET['id']){ $sql="WHERE shop_id=$_GET['id']";}
みたいな感じで、受け取ったidをWHEREで使う様なやり方です。
ちなみにこのまま命令文は、エラーがあるらしく何も表示されませんでした・・・。
PHP Version 4.3.10、MySQL 4.0.20という環境です。
どうか宜しくお願いします。
0190nobodyさん
2005/09/29(木) 23:01:56ID:????id= の後ろにセミコロン入れられると、悪い人の任意のSQLをさしこまれちゃうよ。
UPDATEとかDELETEとか。
こうしな
$sql = "WHERE shop_id=" . (int)(@ $_GET['id']);
まあゼロをどう扱うかは自分で調節して。
0191188
2005/09/29(木) 23:02:17ID:???早速のお答え、どうもありがとうございます。
ちゃんとidが動的に切り替わり、表示される様になりました。
・・・ですが、「とっても危険」という言葉が非常に気になっています・・・。
何がどういう点で危険なのか教えて頂けないでしょうか?
また、危険にならない代替案ってあるんでしょうか?
質問ばかりでスイマセン・・・。
0193nobodyさん
2005/09/29(木) 23:51:19ID:???$_GETには任意の文字列を入れることが出来るから、「;」で区切って
次のSQL文を自由に入れられてしまう。そうなったら編集も削除も思いのまま。
だからSQL文に渡す場合は何かしらのフィルタリングを自分ですることになる。
(今回の場合は数字以外の文字列があったら消すとかエラーで弾くとか)
この辺は自分で勉強しないと身に付かない。勉強が嫌なら下手に触らない事。
0194nobodyさん
2005/09/29(木) 23:59:10ID:???掲示板や、メールフォームですぐに送信させずに
入力画面→確認画面→送信完了画面という3ページの構成だったとします
で、確認画面でやり直しをしたい時、ブラウザの戻るもしくはhistory.back関数で
戻ったときに、フォームに入力した内容を保持させるためにはどうすればいいんでしょうか?
0196nobodyさん
2005/09/30(金) 00:07:15ID:???なるほど。
こちら側でキャッシュさせるようにすれば、少しは確実になるってことになるってことですかね。
session や、hiddenか何かでやるかと思ってました。
ありがとうございました(・∀・)
0197nobodyさん
2005/09/30(金) 01:04:12ID:???SQLインジェクション でググると色々出てくるので、質問よりそっち見たほうが早い
・・・確か価格.comの件ってこれだったよな?あの件以来価格.comに登録してあった
アドレスにspamが来るんだが・・・
>>196
どうしてもやりたいなら「前の画面に戻る」リンクを作り、そこで戻させるように
するしかない。それでもブラウザの戻るで戻られたら意味がないけど。
そういやFirefoxだとブラウザの戻るで戻っても残ってたな・・・
0198nobodyさん
2005/09/30(金) 01:37:08ID:???俺もspam来てる。
そりゃ、0day-attackとかなら許せるけど、SQLインジェクションとか・・もう馬鹿かと・・・。
きっと他にも大量に穴があったんだろうなぁ。
0199nobodyさん
2005/09/30(金) 02:17:32ID:???逆だと思うぞ。
確実にやりたいなら、クライアントの挙動に期待などせずに(つまりキャッシュなぞ”させない”)
サーバ側で言うとおりセッション何ぞで管理するこった。
0200nobodyさん
2005/09/30(金) 07:36:44ID:???とにかくGET POST COOKIEは入力値をチェックしてから使え
if (strstr($_GET['id'], ";")) { echo "氏ねバカアホ"; exit; }
elseif (!is_numeric($_GET['id'])) { echo "いたずらはいやずら"; exit; }
0201nobodyさん
2005/09/30(金) 08:33:55ID:FAEPRLcc0202nobodyさん
2005/09/30(金) 09:11:32ID:???0203nobodyさん
2005/09/30(金) 10:40:52ID:???お前とりあえずPHPの参考書をせめて2〜3冊は読んでみろよ。
基礎の基礎を知らずにやってても上達しない。
セキュリティ対策云々とかの前に、idに変数を代入するというような
プログラミングにおける超基本的な思考が出来てない。
この調子じゃ配列なんか絶望的だな。
0205名無したん(;´Д`)ハァハァ
2005/09/30(金) 13:37:42ID:kjDGUNft[a-zA-Z0-9_] と等価という認識で問題ありませんか?
0206nobodyさん
2005/09/30(金) 13:43:35ID:???0207nobodyさん
2005/09/30(金) 13:46:02ID:???0208nobodyさん
2005/09/30(金) 13:47:11ID:???0209nobodyさん
2005/09/30(金) 13:49:21ID:???0210188
2005/09/30(金) 14:48:49ID:???>>197
>>200
>>203
大勢の方からのアドバイス、本当に感謝しております。
一度基本から、じっくりと勉強し直してみる事にします。
さっそく今日辺り、
「基礎PHP」か「はじめてのPHP言語プログラミング入門」でも
買ってこようかと思います。
親身なご指導、本当にありがとうございました。
0211nobodyさん
2005/09/30(金) 15:03:14ID:???どうでもいいけど、最近ネット上でもリアルでも「少なからず」と「少なくとも」の意味をごっちゃに使ってる香具師を少なからず見かけるな。
「少なからず」は少なくはないって意味なんだが。
まあ言葉の意味なんて時代と共にうつりかわっていくのかね。
スレ違いな話でスマソ
0212軟式PHP
2005/09/30(金) 15:54:03ID:???0213nobodyさん
2005/09/30(金) 15:54:16ID:???0214nobodyさん
2005/09/30(金) 16:00:18ID:0T6o3fdx自分でチェックするしかありませんか?
0215軟式PHP
2005/09/30(金) 16:02:04ID:???時代遅れってこともないけど、環境によっては仕方ないんじゃないのかな。
データベースが使える環境なら、絶対使ったほうが開発は楽。
シリアライズを使って作るのもありじゃないかなぁと思うけど
ログが多くなってきた場合のアンシリアライズの速度や、
過去ログ管理が面倒さが気になるけどやったことないので分からない。
0216nobodyさん
2005/09/30(金) 16:06:56ID:???おまいさんには↓の本がオススメだ。PHPに限らずプログラムを理解しやすい。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4798006696/
ただし今は注文できないみたい。絶版か??
0218nobodyさん
2005/09/30(金) 16:28:17ID:???ttps://www.honya-town.co.jp/servlet/jp.co.honya_town.p3.HSsearchServlet?ipg=1&iqm=2&isc=999999&ici=ZB01&ibo=&itm=0&ib1=1&ib2=2&ib3=4&ib4=8&ipu=&iop=0&iau=&ioa=0&isy=&ism=&iey=&iem=&ifr=&ifm=0&iol=20&ipr=0&ibt=0&iis=4798006696&x=46&y=20
絶版ではないらしい。品切れ扱い。
0219nobodyさん
2005/09/30(金) 17:04:56ID:???>少なからずあるといえばあるが、可能性は限りなく少ない
これを211の言うように置き換えると、
少なくはないがあるといえばある
あれ、何処が問題なんだ?
やばい俺日本人じゃないのかも。
0221nobodyさん
2005/09/30(金) 20:12:51ID:???<?php
$date = "<li>aaaaaaaa</li><li>bbbbbbbb</li><li>cccccccc</li>";
if(eregi("/<li>.*?<\/li>/",$date,$ary)){
print "$ary[0]";
}
?>
0223nobodyさん
2005/09/30(金) 20:31:23ID:???http://php.s3.to/man/function.eregi.html
マニュアル
「/」イラネ
で.*?じゃなくて(.*)?
最低エラーメッセージくらい書きたまい。
0225nobodyさん
2005/09/30(金) 20:41:59ID:???ありがとうございます。エラーは解決できました。
でも、【<li>aaaaaaaa</li>】だけとりたいんです、
最短マッチができません。
0227nobodyさん
2005/09/30(金) 21:26:13ID:???正規表現が苦手ならsubstr辺りで処理すればいい。
正規表現を勉強したくてやっているのなら丸投げするな。
0228nobodyさん
2005/09/30(金) 22:09:27ID:???<?php
$number = array ("1","2","3","4","5","6","7","8","9");
$alpha = array ("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
"p","q","r","s","t","u","v","w","x","y","z");
shuffle ($number);
shuffle ($alpha);
echo ("<br />");
foreach ($number as $value_number){
echo ($value_number);
}
echo ("<br />"."<br />");
foreach ($alpha as $value_alpha){
echo ($value_alpha);
}
?>
0229nobodyさん
2005/09/30(金) 22:22:02ID:???何がやりたいのかイマイチ分からんが・・・
<?php
echo '<br /'>',
str_shuffle('123456789'),
'<br /'>', '<br /'>',
str_shuffle('abcdefghijklmnopqrstuvwxyz');
?>
0230nobodyさん
2005/09/30(金) 22:44:23ID:???ありがとうございます。
str_shuffle関数は下記のようにまずシャッフルして、それから出力といった使い方はできないんですね(´・ω・`)
<?php
$alpha = "abcdefghijklmnopqrstuvwxyz";
str_shuffle($alpha);
echo ($alpha);
?>
0231nobodyさん
2005/09/30(金) 23:02:58ID:???0235nobodyさん
2005/09/30(金) 23:17:43ID:???ありがとうございます。
小数点以下を切り捨てる場合はどのようにすれば良いんでしょう?
$total += (filesize($afn)/1024);
こんな感じでやってるんですが
0236nobodyさん
2005/09/30(金) 23:29:36ID:???てか検索しろよ
0237nobodyさん
2005/09/30(金) 23:58:24ID:???あ、>>229は余計な'があったな(試してないのバレバレ・・・)。
str_shuffle()のマニュアルを読めば判ると思うが「適当に入れ替えた文字列を返す」だから、
$alpha=str_shuffle($alpha);
で済むのではないかと。
0239239
2005/10/01(土) 04:07:40ID:???$logfile = "./counter.log";
$cookiename = "mycookie";
$counter = 0;
if( $fn = @fopen($logfile,'r')){
$counter = trim(fgets($fn));
fclose($fn);
}
if(!isset($_COOKIE[$cookiename])){
$counter++;
setcookie( $cookiename,$counter);
if($fn=@fopen($logfile,'w')){
fwrite($fn,$counter);
fclose($fn);
}
}
?>
<html>
<body>
<?php
if($fn= @fopen($logfile,'r')){
$counter=trim(fgets($fn));
fclose($fn);
}
print($counter."人目です");
?>
</body>
</html>
を実行すると、
0240239
2005/10/01(土) 04:10:56ID:IQUyxXuW(output started at C:\04WebServer_182\04WebServer\DocumentRoot\p.php:1)
in C:\04WebServer_182\04WebServer\DocumentRoot\p.php on line 11
46人目です
↑こんなんが出ます。
HTTPヘッダが送られた後にクッキーを送ろうとしてるので、こんなエラーが出るのだと解読しましたが、
当たっていますか?
また、解決するにはどうすればいいでしょうか?
0241nobodyさん
2005/10/01(土) 04:17:34ID:???本にそってapacheはちゃんとインストールできて、「予想に反してー」ページが出ます。
phpもインストールでき、php.iniを/usr/local/libに置いています。
httpd.confにも
AddDefaultCharset none と
AddType application/x-httpd-php .php
を追加しています。
しかしphpにブラウザでアクセスしてもダウンロードダイアログが出てしまいます。
apacheも再起動してます。何か他の問題は考えられますか?
apache2.0.53 、 php5.0.4
FedoraCore4です。よろしくお願いします。
0243nobodyさん
2005/10/01(土) 08:58:49ID:???正解。クッキーはHTTPヘッダの中にSet-Cookie: mycookie=239の形で埋め込まれる。
1行目でヘッダ以外のものを出力したのでPHPの中の人はヘッダが終了したと思っている。(output started 〜 p.php:1 の部分)
うちでは問題なく動作したよ。「 <?php」てな感じにスペース1つを追加したら同じwarningを出せたけども。
0244nobodyさん
2005/10/01(土) 11:13:05ID:???ワロス
0245nobodyさん
2005/10/01(土) 12:22:33ID:???0246nobodyさん
2005/10/01(土) 12:50:33ID:???提示された行付近をチェックしたのですが、エラーの原因がサッパリわかりません。
ごく普通のswitch文なんですが、何がいけないのでしょうか?
switch( mysql_num_rows($sql_result) )
{
case 0:
$id_result = "";
break;
default:
$id_result = ""; ←ここがダメと言われる
}
ちなみに、問題の行をコメントアウトしても同じ行数でエラーが出ました
0247nobodyさん
2005/10/01(土) 13:00:16ID:???または括弧の対応とかさ。
0248nobodyさん
2005/10/01(土) 13:01:24ID:???0249nobodyさん
2005/10/01(土) 13:02:26ID:???Parse error: parse error, unexpected '}' in
てな感じで、何が不適切なのかもでてるでしょ?それも参考にしる
0250246
2005/10/01(土) 13:04:54ID:???試しに、switchを丸ごとコメントアウトして実行するとエラーが出ませんでした。
一体全体何が・・・
eclipseでやってるので、括弧の対応不一致とかも無いです
0251246
2005/10/01(土) 13:05:51ID:???それが出ればいいんですが、
Parse error: parse error in ファイル名 on line 63
しかでないんです・・・
0252nobodyさん
2005/10/01(土) 13:09:02ID:???PHPのアクセラレータかオプティマイザの所為かもしれない。
phpinfo()でインストールされてないか確認。
0254nobodyさん
2005/10/01(土) 14:44:59ID:???> サーバーにアップして実行すると、Parse errorが出たので、
これってローカルで試した時はエラー無しでアップしたらエラー出たって意味か?
0256246
2005/10/01(土) 16:18:25ID:???いえ、書いてあるそのままの意味です
ローカルで実行する環境作ってないので
で、自己解決しました。
上に抜き出したソースは空文字列にしてますが、
実際にはcase 0 と default で、$id_resultにそれぞれ違う文字列を代入してたのですが
その文字列の内容を変えたら動くようになりました。
文字コードの問題なのでしょうか・・・
とりあえず、お騒がせしました。
0257nobodyさん
2005/10/01(土) 16:37:04ID:???0258nobodyさん
2005/10/01(土) 17:01:10ID:???0259nobodyさん
2005/10/01(土) 17:04:31ID:eDSneZeHまた、WebサーバとしてApacheを用いた場合とIISを用いた場合ではPHPの挙動にどのような違いが出るのか教えていただけないでしょうか?
0260nobodyさん
2005/10/01(土) 17:52:22ID:???ApacheのSAPIとIISのISAPIは似たような技術だけど、
ApacheのDSOってのは全然ジャンルが違う。
そもそもそんな比較が出てくる時点で
「CGIとPHPは違うの?」並に理解不足と思われ。
0261259
2005/10/01(土) 18:13:42ID:???すみません。こんな理解不足の僕がこの辺の知識を得るために読むべき本やサイトを紹介していただけたらありがたいのですが…。よろしくお願いいたします。
0262nobodyさん
2005/10/01(土) 20:15:03ID:???リファレンスマニュアルにもないような・・・・
0265nobodyさん
2005/10/01(土) 21:09:27ID:???262でしたorz
0266nobodyさん
2005/10/01(土) 21:29:13ID:???ローカル環境とサーバー環境で並び方が違います。
ローカルではabcの順に並んでるのですが、鯖側では規則性が見つけられませんでした。
何が問題でしょうか。
0267nobodyさん
2005/10/01(土) 21:38:22ID:???フォルダ操作は環境依存。
0268nobodyさん
2005/10/01(土) 21:57:57ID:???$comment = preg_replace("/\n{2,}/", "\n\n", $comment);//2行以上の改行を2行に
上記のはわかるんですが、掲示板のコメントとか名前を改行禁止(改行しても一行表示)にしたいのですが…
どなたか教えて下さい
0269nobodyさん
2005/10/01(土) 22:35:17ID:???君、応用力ないなぁ…
つ[$comment = preg_replace("/\n/", "", $comment);//改行を削除]
0270nobodyさん
2005/10/01(土) 22:37:49ID:???処理
}
これは $i に値が存在する場合TUREを返し、ループ。
値が存在しない場合はFALSEを返すからループ停止。
という意味でOKですか?
0271nobodyさん
2005/10/01(土) 23:06:42ID:???fgetcsv()はファイルの終端に達した場合を含み、 エラー時にFALSEを返します。
0273nobodyさん
2005/10/02(日) 00:03:36ID:???PHPについてこの後はどのようなことをして勉強をすれば良いのでしょうか?
0274nobodyさん
2005/10/02(日) 00:21:46ID:???一度自分で実際に作ってみて、
問題にぶつかってからいろいろ考えればいいじゃない。
勉強するだけじゃスキルは身に付かないよ
■ このスレッドは過去ログ倉庫に格納されています