【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あたり
0043nobodyさん
2006/03/16(木) 13:57:03ID:???test.php?mode=2
というURLにあるフォームで書き込んだとき
ログファイルには
「2,書き込んだ内容」
というように、modeの数字を頭に付けたいと思っています。
<?php
extract($_POST);
$cmtfile = "testcmt.txt";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$mode = $_POST["mode"];
} elseif ($_SERVER["REQUEST_METHOD"] == "GET") {
$mode = $_GET["mode"];
}
004443
2006/03/16(木) 13:57:35ID:???<form method="post" action="<? echo $PHP_SELF; ?>">
<input name="cmt" type="text">
<input type="submit" value="submit">
</form>
<?php
if($cmt){
$cmt = htmlspecialchars ($cmt);
if(get_magic_quotes_gpc()){
$cmt = stripslashes($cmt);
}
$thisnum = $mode;
$dat = "$thisnum,$cmt\n";
$fp = fopen($cmtfile, "a");
fputs($fp,$dat);
004543
2006/03/16(木) 13:58:53ID:???fclose ($fp);
}
?>
これだと、testcmt.txtには
「,書き込んだ内容」
と、modeの数字が反映されません。
サンプルプログラムの貼り合せでお見苦しい点も多々ですが;
OSはWinXP,PHPVersionは5.1.2,AN HTTPD DAEMONです。
できるだけ小直しで解決できたらいいな><;
よろしくお願いします。
0047nobodyさん
2006/03/16(木) 14:41:42ID:???レッツの古いスクリプトに影響された悪い見本そのものだな...
まずはextract()使わないで書き直してみ。あとGET/POSTメソッドを
それぞれの場合で流れを追って。
extract()使うなら使うでも構わないけど、それが何をやってるか理解した上で
駄目なところを直す。やってることが理解できれば、駄目なところも判るよ。
0048nobodyさん
2006/03/16(木) 14:47:52ID:???$_REQUESTを使うと吉。
マジッククオートの\除去はスクリプトの先頭で。
"$thisnum,$cmt\n"は"${thisnum},${cmt}\n"とした方が見やすいしバグ防止になる。
fputsはLFを書き込むから、上の\nを消すかfwriteを使う。
$cmtが0だと書き込まれない。empty()を使う。
あと、error_reporting(E_ALL)
0049nobodyさん
2006/03/16(木) 14:47:53ID:???PHPにも問題はあるが、とりあえずhiddenでmodeを渡してやれば終わりだろ。
0052nobodyさん
2006/03/16(木) 14:52:11ID:???fputsはfwriteの単なるエイリアスじゃなかったけ?
http://jp.php.net/manual/ja/function.fputs.php
0055nobodyさん
2006/03/16(木) 18:04:59ID:???ポップアップがダメならば
<div style="display:none;">だったものをdisplay:blockあたりにして確認するという手もある。
>>54
完全にスレ違い。
http://pc8.2ch.net/test/read.cgi/hp/1142242220/l50
0056nobodyさん
2006/03/16(木) 20:11:33ID:???あとファイル名をチェックせずに、ファイル操作してると、/etc/passwdを含むファイル名でうpすればパスワード流失しないか?
0057nobodyさん
2006/03/16(木) 20:45:31ID:???0058nobodyさん
2006/03/16(木) 21:07:45ID:5JEd8fcSindex.php?id=0123&hoge=xxxx → ページBを表示
こんな感じでクエリ情報で違うページを出力しているのはどうやっているのだろう。
というか、何の意味があるんだろうか…(もう一つファイル作ればいいし、ナンセンスじゃないの?)
if (isset($_GET[?id?]) and $_GET[?id?] == "0123") {
条件式がTRUEの場合の処理
} else {
・・・・・・・・・
}
この場合、include()しているのかな。
それとも単にprint()…?
何の意味があるのでしょうかねぇ。
0059nobodyさん
2006/03/16(木) 21:23:46ID:???0061nobodyさん
2006/03/16(木) 21:50:20ID:???もし、一つのファイルに:
if(条件式){
print <<<END
…………………
END;
}
って大量にかいてあったら処理とか重くなるんじゃ…
0062nobodyさん
2006/03/16(木) 21:56:13ID:???普通にやると汚くなりますよね。
0063nobodyさん
2006/03/16(木) 22:00:38ID:???綺麗にできるかどうかはPHP関係なくてGDやImageMagickの問題だろ?
そっち方面で綺麗に変換するためのコツでも聞いてくるか、
それ以外の画像変換ライブラリやツールを漁ってくればいいんじゃね?
0064nobodyさん
2006/03/16(木) 22:36:16ID:???006524
2006/03/17(金) 01:29:23ID:???今の自分のちからでは無理に確認画面を作るより、完了idをgetで渡すとかしてすぐに編集に戻れるようにしたほうが使い勝手がよさそうなので、ひとまずそういう形にしておきますた。
ところで、
ファイル選択&POSTで次の画面が出たところで
$_FILE配列にpostしたファイルの情報が入り、鯖のテンポラリに変なファイル名で一時的に選択した元ファイルがアップ(コピー)されるという解釈でよろしいでしょうか?
疑問なのはこのテンポラリのファイルがいつまで残ってるかという点です。
マニュアルには
>移動または名前の変更が行われていない場合、リクエストの終了時にその ファイルはテンポラリディレクトリから削除されます。
とありますから、この画面からリンクをクリックしたり、ほかのURLを叩いたり、POSTやGETで移動したりした時点で消えるということですか?
だとしたら、>>27さんの方式で$_FILESをセッションで持ち歩いても意味ないってことになっちゃいますよね?
また>>26さんの方法でも、やはり次の画面に逝ったところでテンポラリは消えてしまう訳で・・
やはりpostした次の画面でとにかく、ファイルの名前付けて移動するとこまでやっちゃわないとだめですね。
さらにここで確認OKでは無かった場合、この移動済みのファイルを消す処理、さらに痛いのは、入力に戻ったところで他の文字等の入力値はセッションで保たれますがファイルは再選択の必要があるってこと。
ファイル名にDBのレコードID番号(自動連番)と関連づけたファイル名にしたい場合はさらにめんどくさい処理にorz
ファイルが絡むとこんなにめんどくさいなんて思ってもみなかったす。
0066nobodyさん
2006/03/17(金) 02:30:51ID:???お前さん、フォームでファイルアップロードしてるんだよね?
そのアップロードされたファイルを何のファイルで参照したり使ったりするんだ?PHPファイルだろ?
>>27はスクリプトが終わる前にテンプファイルの中身を全部テキストと同じ扱いでセッションにぶち込む、
>>26は、入力チェックでOKの場合にファイルを選択させるって事じゃないのか?
0067nobodyさん
2006/03/17(金) 09:56:23ID:fjaH3SIM}
で、hoge($b); として、この $b の変数名('b')を、
hoge() 内で取得する方法はありますか?
0068nobodyさん
2006/03/17(金) 10:00:25ID:???生PHPで保存するのと、シリアライズして保存するのでは、
速度差はどれくらいあるもんでしょうか?
0069nobodyさん
2006/03/17(金) 10:31:56ID:???phpの解説サイトのレッツphpっていいんですか?
グーグルでphpというキーワードで日本語のサイトを検索すると上位に来るんですが、
ソースとか参考になりますか?
ソースの書き方の体裁は参考になるけど内容はだめ、
とかそういうのがあれば教えてください。
ほかに、サンプルが豊富なためになる解説サイトがあればおしえてください。
phpってhtmlで言うところの不思議マークアップのようなものがあったりするんでしょうか?
0070nobodyさん
2006/03/17(金) 10:33:41ID:???PHPマニュアルを見ましょう。
0072nobodyさん
2006/03/17(金) 11:37:51ID:???レッツphpのソースは参考にならない。時が止まったままだ。
読んでやってる処理をみるのは構わないけど、あれを基にしたり
同じようなコードを書くのは自分に悪い癖を付けるだけ。
(ちょっと宜しくないかなというレベルではない)
>不思議マークアップ
俺も判らん。正確で無い変な用語を使うのは、仲間内にとどめとけ。
0073nobodyさん
2006/03/17(金) 11:41:52ID:???マニュアル以外で参考になるサイトがないってこと?
0074nobodyさん
2006/03/17(金) 12:43:01ID:???0075nobodyさん
2006/03/17(金) 12:50:20ID:???PHPしか扱えなくて、プログラムできます、なんて言ったら大恥。
C言語やJavaをお勧めする。入門書1冊やるだけでいいから。
007669
2006/03/17(金) 13:24:51ID:???レスどうもです。まったくの無知なのでマニュアルを見ても、
マニュアルにちょこっと載ってるサンプルらしきものをみてもよくわからないので
htmlのときのように他人のサンプルを触りながらのほうが理解できるかな、と思いまして。
やはりマニュアルの熟読から始めたほうがいいのでしょうか。
あとphpからプログラムをはじめるのはダメなんでしょうか。
phpはかんたんだと聞いたので。
かんたんというか、ある程度適当に作っても動くって意味なんでしょうか。
だからちゃんとした文法が身につきにくい・・・とか?
phpしか使えなくて恥をかく、とかは別に気にしません。
0077nobodyさん
2006/03/17(金) 13:26:38ID:???不思議マークアップってのは、見た目のみ最優先にして本来の仕様とは異なる目的で
使われているHTMLの書き方のこと。対義語はstrict。CSSが無かった時代の悪癖。
「悪い見本」[過去の遺物]って点でKENTやレッツPHPもそれに近いものであると言えるかもしれないな。
でもぐぐっても800件そこそこしか出てこないマイナーな単語なので、そういう単語で
物事を表現してる時点で>>69はすでに同レベルの人間に成り下がってるとオモ。
で>>69質問の、PHPで参考にできるサイトは唯一、本家マニュアルサイトのみです。
書籍だとマンモス本って言われている「PHP4 徹底攻略」とそのシリーズくらい。
それ以外ではまともに参考にできるものは大変少ないです。
大抵、ちゃんと全体を網羅できていない上に内容が間違ってる。
PHPは初心者を狙ったいいかげんな本やサイトが大量に氾濫してる上に、
ものすごく早いペースで機能拡張・仕様変更が行われているので、
これをちゃんとフォローできてるのは公式的なものしか無いと思っていいでしょう。
0078nobodyさん
2006/03/17(金) 13:42:54ID:???PHPは過保護なママタイプ
大抵の機能はファンクションとして揃ってるから、
レゴブロック感覚でもとりあえず動くものが作れる。
それが良い事なのか悪い事なのかはケースバイケースなので一概には言い切れないけど、
まずはプログラミングの世界に触れてみる第一歩としては間違っていないと思う。
大事なのは2歩目以降。
0079nobodyさん
2006/03/17(金) 13:43:08ID:???サイトは基本的に書きたい事しか書かれてないし、必要な事が書かれてるとは限らない。
明らかに図示した方が理解しやすくても、面倒だからという理由で省いてるサイトは多い。
サンプルベースの方が理解しやすければ、
1) 超入門的な本を読んでまず全体像を掴む。詳細は覚えなくてもいい。
2) チュートリアルとか用例付きの実践的な本を読んで手を付けながら覚えていく。
分からない所は、ぐぐったり、1の本を見て復習しながら進む。
という学習がいいかも。
プログラムの習得の目標をどこに置くかだと思う。一生phpでよければphpで始めて問題ない。
日本語しか話さないなら、日本語だけ知ってればいいのと同じ。
他の言語も覚えたければ、英語とかフランス語習った方が理解が進むように、いろいろ学んでいけばいい。
ちゃんとした文法を身につけたければ、堅苦しい言語を選べばいいよ。
とはいえ、最近の言語は省略形を使えるようにして利便性を上げてる傾向が有るので、どれも汚く書ける(=その代わり速度は速い)から有る程度癖がつくのはしょうがないと思う。
あんまりどっぷり嵌らないうちにいろいろな言語を弄って自分の好みの言語や記述スタイルを確立していけばいいと思う。
Cとかだとあまりにも個人差が有りすぎて、保守性悪いので、書式統一にINDENT(1)を義務づけるとかやるよ。
phpの書式整形手段はエロイ人に任せる。
0080nobodyさん
2006/03/17(金) 13:44:51ID:???PHPは簡単だけど、目的から行くと「他の言語で基本を知ってる人が
Web目的で楽をするための言語」だと俺は思ってるので、
同種の文法を持ってるCやJavaの基礎を先にやった方がいい。
PHPの便利なところは「ものすごく大量のWeb専用機能を内蔵してる」とこなので、
PHPの解説サイトや解説本はそこを重点的に説明してて基礎解説は全然しないし。
そういった便利関数を調べるのに追われて基礎を学ぶ暇が無くなるのはナンセンス。
で、その便利関数は頻繁に増えていってるので、これを全て網羅できるのは
公式サイトのオンラインマニュアルだけ。その辺のリファレンス本では無理。
結論として、他言語で基礎を知ってから、公式サイトをリファレンスにして
PHPを使い込む、って順番でやるのが最も効率的で間違いが少ない。
008169
2006/03/17(金) 14:16:47ID:???たくさんのレスありがとうございます。
最初にCやJAVAで文法の基礎を学んでからPHPの利便性を享受するか、
敷居の低いPHPから入って他のプログラム言語へと幅を広げるか、
ということでしょうか。
CとかJAVAって難しそうなので、
上の場合は忍耐力、下の場合は向上心がいるっぽいですね。
どうもありがとうございました。
いろいろと触れてみたいと思います。
0083nobodyさん
2006/03/17(金) 15:23:09ID:???授業だったらそうも行かないかもねー。
0084nobodyさん
2006/03/17(金) 15:26:47ID:???BASICやらせるよりタチわりぃ
0086nobodyさん
2006/03/17(金) 15:52:15ID:???レベル的にはPHPしかやったことないのとどっこいなくらいに微妙な連中なんだが、
それでもPHPしかやってないやつよりは綺麗なコードが書けるのがちょっと多い感じ。
なんでああ、PHPしかやってないやつってコードめちゃくちゃなのが多いんだろう?
HTMLにコード埋め込みorコードの中でHTMLをecho、が最初にあるせいなのか?
0087nobodyさん
2006/03/17(金) 16:57:00ID:???ブラウザの「名前を付けて保存」ではなく、submitボタンなどを押して
そのphpページをダウンロードするような。
0088nobodyさん
2006/03/17(金) 16:59:33ID:???できるよ。PHPには出力制御関数ってのがあって、ブラウザに表示する内容を
丸ごと変数に格納したりできる。それ使えば丸ごとファイルに保存→DLも楽々。
0090nobodyさん
2006/03/17(金) 20:00:57ID:???俺には何がしたいのかが分からない。
もしやりたい事がこれならマニュアルの「言語リファレンス」と「機能」だけでも全部読んでくれ。
ttp://php.s3.to/man/language.variables.variable.html
0091nobodyさん
2006/03/17(金) 20:38:54ID:???最初から名前そのものを引数として渡すんならともかく、それは無理でしょ。
あれば「変わった使い方」ができそうだけど、変わった使い方すぎて
どこで何が起きてるか不明な状態になる=グローバル変数病のもっとタチの悪いものになる
だけなので、意義は感じないな。
0093nobodyさん
2006/03/17(金) 21:09:57ID:???// 何かの処理
}
0094nobodyさん
2006/03/17(金) 21:11:10ID:???009589
2006/03/17(金) 21:12:46ID:???http://kaiunix.cs.shinshu-u.ac.jp/Lesson/ProgLangT/2005/VariousProgramStructure.html
とかでいいのかな結合度って
関数の話で変数とのつながりがいまいち分かりませんでした。
思ったけど配列なら内容を検索してkeyを返すって出来るね
0096nobodyさん
2006/03/17(金) 22:26:44ID:qt9OXvzzとした場合、ループ中に毎回ファイル読み込んでるわけではないですよね?
毎回読んでたらループしませんもんね?
いや、一応確認したかったので。
0099nobodyさん
2006/03/17(金) 22:41:23ID:???0100nobodyさん
2006/03/17(金) 22:42:49ID:???0104nobodyさん
2006/03/17(金) 22:57:47ID:WHiStkGKphpで書いたフォームで、入力された内容に
全部まとめてhtmlspecialcharsとかmb_convert_kanaを
かけたいんですけど、どうやったらいいですか?
いままでは
$hoge = mb_convert_kana($hoge, "KV", "SJIS");
$hoge2 = mb_convert_kana($hoge2, "KV", "SJIS");
$hoge3 = mb_convert_kana($hoge3, "KV", "SJIS");
と、項目の数だけ同じ行を増やしていました。
0105nobodyさん
2006/03/17(金) 22:58:56ID:???動作への不安が頭をよぎる。
foreach (file($hoge) as $line) { 〜 }
毎回は読み込まないよなぁ?…って
0106nobodyさん
2006/03/17(金) 22:59:41ID:???ホントに全部にかけちゃっていいなら
$_REQUEST = array_map("htmlspecialchars", $_REQUEST);
とかそんな感じ
0107nobodyさん
2006/03/17(金) 23:01:33ID:???いやそれはどうかと。別に全然綺麗じゃないし。
綺麗云々じゃなく素直に「中身が想像できないから見て分かる確実な書き方しかできません」って言いなされ。
0109nobodyさん
2006/03/18(土) 00:05:44ID:???0110nobodyさん
2006/03/18(土) 00:16:14ID:???マニュアルに「php.iniの場所は環境変数PHPRCにディレクトリパスを書くことで
指定できる」と書いてあるのに、IISのISAPIだとWindowsディレクトリ下しか
見てくれません。PHPRCによる場所指定はコマンドライン起動などでしか
使えないんでしょうか…。
0112nobodyさん
2006/03/18(土) 01:27:17ID:PidsL1FkID<>なまえ<>内容<>アクセス数
ID<>なまえ<>内容<>アクセス数
・・・
・・
・
のようなログファイルをすべて読み込んでアクセス数順にソートして
再度ログファイルに書き込むようなスクリプトを書いているのですが、
似たようなプログラムだとかってありますでしょうか?
ランキングスクリプトを作りたいと考えてます
どなたか書ける方いらっしゃいませんでしょうか・・・・
挫折してしまいました・・・・
0113nobodyさん
2006/03/18(土) 01:32:46ID:???スレ違い。
依頼スレじゃない。
これだけじゃ分からん。
phpを読み込んだ時にアクセス数が増えるのか、
それとも元からあるファイルを見やすいように順番を入れ替えるのかにもよる。
前者なら、更新部分だけ順番を入れ替えれる(もしくは0.5とか姑息な数字にしてソートする)などが考えられる。
後者なら、総当り方式で順番をつけてくのが吉。
0114104
2006/03/18(土) 01:36:12ID:Lr7F21tPレスありがとうございます。
厳密に言うと、全部じゃなくて殆どの項目といった感じです。
任意の項目にまとめてかける方法はありますか?
いままで僕が書いていたように項目の数だけ行を増やすのは
あまりいいやり方ではないですよね?
0115nobodyさん
2006/03/18(土) 01:41:36ID:???あんまり何でも手際の良いスタイルを目指さなくてもいい時もある。
増やしたい部分だけやるのがいいと、俺は思うよ。
もっと良いコード書く人いるから。
その人がそういうの書いてくれると嬉しいよな。
0117nobodyさん
2006/03/18(土) 02:11:07ID:???>>114
$input_name = array(
"name1",
"name2",
"name3",
"name4",
"name5",
);
foreach($input_name as $k) {
$_REQUEST[$k] = htmlspecialchars($_REQUEST[$k]);
}
俺ならこんな感じ。
ある程度パターン化された一覧表みたいなPOSTを受け付けるときは
こんな風に一括処理をかけちゃうかな。
で、これは変換対象を列挙する方式だけど、これがめちゃめちゃ多くて
逆に除外側を列挙した方がずっとシンプルになる場合は
$ext_name = array(
"ext1",
"ext2",
"ext3",
);
foreach(array_keys($_REQUEST) as $k) {
if(in_array($k, $ext_name)) continue;
$_REQUEST[$k] = htmlspecialchars($_REQUEST[$k]);
}
みたいな手もあると思う。
0118nobodyさん
2006/03/18(土) 02:19:15ID:???0119nobodyさん
2006/03/18(土) 02:21:40ID:tuV8tpcr0120nobodyさん
2006/03/18(土) 02:24:50ID:???こういうワーク的な変数を大量生産するのはむしろ汚く見えるなー。
ワーク変数って名称に意味を持たせにくいから適当な名前になりがちだし、
それでうっかり被って変数破壊したり、変数名打ち間違ってバグったりって
凡ミスするやつを現場で何人も見たことがある。
しかも、そういうワーク変数を増やしたがるやつって大抵はエレガントなロジックを書けないんだよね。
やたら回りくどい手法を使いたがって、ますます凡ミスの可能性を増やしてんの。
で、挙句の決め台詞が「PHPは変数初期化ミスをちゃんと警告できないのがダメだよね」ときたもんだ。
おまえがヘタレなだけだっつ〜の!
0123nobodyさん
2006/03/18(土) 03:45:23ID:???まとめたリストってどっかにないかな??
掲示板とかでそういうのが投稿されたら
ブロックするようにしたいんだけど。
0124nobodyさん
2006/03/18(土) 03:55:03ID:???0127nobodyさん
2006/03/18(土) 06:34:25ID:???foreach (file($fname) as $line) { }
こう書くときはエラー処理しなくていい場合な。
綺麗とか汚いの問題じゃないぞ。
0128nobodyさん
2006/03/18(土) 06:57:48ID:???output_bufferingってどっちに設定すればいいでしょうか?
0129nobodyさん
2006/03/18(土) 07:20:53ID:???0130nobodyさん
2006/03/18(土) 08:00:00ID:???0131128
2006/03/18(土) 08:06:16ID:???EUC-JP ユーザ用の php.ini の設定
SJIS ユーザ用の php.iniの 設定
ってあってEUCはOffにSJISはOnにって書いてあってきになった・・
デフォのOffでいいのかなぁ・・
0133nobodyさん
2006/03/18(土) 11:49:16ID:p8xxneVQそれにDHTMLでアクセスする
ってあたりの事が書いてるスレかサイトって無い?
0134nobodyさん
2006/03/18(土) 11:57:35ID:???0135nobodyさん
2006/03/18(土) 11:59:57ID:???$inputstr = "uwaaaaa!";
から
uwaaaaa!
という出力を得たいとする。
============================
function aaa($str){
//実際はもっとめんどくさいごにょごにょがここに
echo $str;
}
function bbb($str){
//実際はもっとめんどくさいごにょごにょがここに
return $str;
}
============================
その場合
aaa($inputstr);
とするのと
echo bbb($inputstr);
または
$output = bbb($inputstr);
echo $output;
とするのどっちがいいんでしょう?
0136nobodyさん
2006/03/18(土) 12:05:33ID:???・表示するためのデータを作成する部分
・用意したデータを表示する部分
ってな感じに分割していると後々変更する時に楽なので、
$output = bbb($inputstr) がいいんジャマイカ?
0137nobodyさん
2006/03/18(土) 12:09:06ID:???値をごにょごにょするだけの関数なら、見やすさに応じて真ん中か下。たとえば、substr。
0139nobodyさん
2006/03/18(土) 12:29:47ID:???なるほど。
関数名の付け方とかで区別すればいいことに今気がついた。
呼ぶだけでechoするのは
print_nantara()とかecho_nantara()
ごにょごにょして返すのは、return_nantara()とか。
いままでそういう名前の付け方してなかった
>>118
ちなみに漏れもよくやります。上書き以降で元の値が必要ないとか、整形が必要なら、その都度ごにょごにょしないで、上書きしちゃえばいいと思ってます。
そんなに悪い事なのかな?
■ このスレッドは過去ログ倉庫に格納されています