【PHP】下らねぇ質問はここに書き込みやがれ 50
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/07/11(水) 17:50:01ID:fYd+34USPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 49
http://pc11.2ch.net/test/read.cgi/php/1182794620/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0472nobodyさん
2007/07/19(木) 18:46:49ID:WayGbRpf0475虚弱PHP
2007/07/19(木) 19:09:46ID:???セキュリティなら、本当に画像ファイルか確認することぐらいかな?
スクリプトファイルをアップロードされると、
ローカルファイル・インクルージョンの手段か、
リモートファイル・インクルージョンの踏み台にされる可能性あり。
ただ、他の脆弱性との組み合わせ技だし、
そんなに気にする必要もないと思うけど。
0476nobodyさん
2007/07/19(木) 19:23:25ID:???・画像のサイズ上限(1MBとか)
・2バイト文字を含むファイル名、空白を含むファイル名を許すかどうか
・同一ファイルをアップロードしたときにファイル名をどうするか(元のファイル名に _日付 を勝手につけるとか)
・ファイルタイプ(gif,jpeg,pngのみ許可)とか
・ファイルアップロードの過程で簡易編集(リサイズ等)を出来るようにするか。
・同時に複数画像ファイルをアップロード出来るようにするか
・アップロード途中に、現在のアップロード状況をプログレスバーの様に表示するか
・アップロードと同時に、サムネイル画像を自動生成するか
等々、いろいろあって、範囲が広すぎて何とも言えない。
あと、最近のネタでは
バイナリ内にphpのコードを仕込むことが出来るらしいがコレの対策とか
とにかくいろいろ結構面倒なので、画像アップロード系のGPL,LGPLのソースとかもみれば良いと思う。
(仕事じゃなかったら、そのまま使って改造した方が楽かもね)
0477469
2007/07/19(木) 19:58:04ID:XK0LpanUありがとうございます。
さっそくツールを見つけて変換してみました。
ただソースとCSVをEUCに変換して、関数の"sjis"変換していたところを"EUC"に直してみたのですが、
”蟒”という字がどうも文字化けしているようでした。
これはもうどうしようもないのでしょうか?
sjisの時は問題なく表示されていました。
0478nobodyさん
2007/07/19(木) 20:04:24ID:WayGbRpfありがとうございます。
最悪の場合などいろんなケースにも対応できるように
アドバイスを元ににプログラミングしてみます。
ありがとうございました。
0479469
2007/07/19(木) 20:26:42ID:XK0LpanU0480469
2007/07/19(木) 20:28:02ID:XK0LpanU見てたコード表がSJISでしたm(_ _)m
0481nobodyさん
2007/07/19(木) 20:31:35ID:???・ライブラリファイル作成に日本語は使わない。上段部にまとめて日本語を記述するかreadme.txtを併用する。
echo "<form name=\"aaa\">というふうに'を使わないで"で統一。
0482469
2007/07/19(木) 21:23:19ID:XK0LpanUなぜなのでしょうか??
0483nobodyさん
2007/07/19(木) 21:26:35ID:???警告でまくりです
どこが詳しいサイトはないでしょうか
0484nobodyさん
2007/07/19(木) 21:31:42ID:???はっきり言って、フリーのDBサーバーは警告文が不親切で使い物になりません。
SQLServer又はOracleをオススメします。
因みに、私はOraclePlutinumを持っています。モチロン新試験の方です。
技術者1200人規模の会社で、DBについては一流の技術を持っていると会社の中で地位を得ています。
0485nobodyさん
2007/07/19(木) 21:34:29ID:???0486483
2007/07/19(木) 21:41:21ID:???ありがとうございました。やはり、DBの設計思想がおかしいようです。
Oralcleの導入を早速検討させて頂きます。
本当にありがとうございました。
0487nobodyさん
2007/07/19(木) 21:45:09ID:???[root@localhost hoge]# vi /usr/local/bin/conv_to_euc.sh
#!/bin/sh
while [ -n "$1" ]; do
if [ -e "$1" ]; then
TMPF=nkftmp$$
nkf -e -Lu $1 > $TMPF
mv $TMPF $1
echo $1
fi
shift
done
こいつを chmod 777 /usr/local/bin/conv_to_euc.sh としてとりあえず実行権限立てて
上記シェルスクリプトを find ./ -name "*.php" |xargs /usr/local/bin/conv_to_euc.sh のみたいにfindをかまして呼び出す。
(よけいなファイルまで変換しないように要注意、findとかのオプションは自分で調べれ)
linux環境ならこれでeuc LF に 一括変換できる(手抜きだからパーミッションは変わっちゃけど)
いきなり本番にはやらないように、バックアップをとってからやりましょう。
ちなみに当然ながらソース内で mb_convert_encording($hoge,"SJIS","auto") なんてやっているところは、それぞれ
mb_convert_encording($hoge,"EUC-JP"","auto") とかに書き替える必要はある。
この類は、windows用とかで一括置換ソフトがあるので、それらを使えばよい。
けど質問者はたぶん全部windows上なんだろうなあ。
0488469
2007/07/19(木) 21:55:30ID:XK0LpanUありがとうございます。
ご推察どおり、Windouws環境です。
PHPファイル、CSVファイル、ブラウザ、ともにEUCなのを確認しました。
SJISだったところもすべて、EUCに書き直しました。
色々試していると、
これだと文字化け
while($line = fgetcsv($db, TEMP_BUF, ",")) {
・・・
echo "$name";
}
これだと文字化けせず
while($temp = fgets($db, TEMP_BUF)) {
$line = explode(",",$temp);
・・・
echo "$name";
}
というようなことが判明しました。
どこかで文字コードの判定が狂ってる気がします。
php.ini の設定ミスかもしれないので少し調べてみます。
0489nobodyさん
2007/07/19(木) 22:14:56ID:???> 注意: この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合
> ファイル中の 1 バイトエンコーディングは間違って読み込まれます。
というわけで、Windows上でfgetcsvを実行するとShift_JISとして処理されてんじゃね
setlocale(LC_ALL, 'ja_JP.eucJP');
をスクリプトのはじめに突っ込んどけば
参考にしたサイト: ttp://blog.development-network.net/ung/2006/09/php5fgetcsv.html
0490nobodyさん
2007/07/19(木) 22:45:59ID:???>mb_convert_encording($hoge,"EUC-JP"","auto");
autoのdetectって結構袋小路に入る。
md_detect_orderを明示的に設定しても駄目なこともある。
コードが決まってるなら、実は$fooを決めうちすべき
mb_convert_encording($hoge,"EUC-JP",$foo);
0491nobodyさん
2007/07/19(木) 22:49:40ID:L7MnxTu6autoが駄目な理由は、文字コードの1バイト目が不定領域にある文字を使っているからでは?
先頭の方で、<!--京-->とすれば解決できるよ。
Yahooのページもソース見ると、そうやっていたりする。
0492nobodyさん
2007/07/19(木) 22:53:24ID:???0493nobodyさん
2007/07/19(木) 22:55:39ID:L7MnxTu6ad-hocも何も釣りなんですが、何か?
0494nobodyさん
2007/07/19(木) 23:13:29ID:???そんな懐かしい技術が最近復活してたりするわけで
http://dictionary.goo.ne.jp/
ソースでみると……
<!--龠龠龠-->
まあ、この場合はIEのせいなんだけど
0495469
2007/07/20(金) 01:21:05ID:0kZTntuaありがとうございます。まさにこの症状だと思います。
ただどういうわけか、setlocale(LC_ALL, 'ja_JP.eucJP');をいろんなところにセットしてみても文字化けが直らなかったので、
素直にfgetcsvの部分をfgetsに直すことにしました。
このたびはたくさんの助言ありがとうございました。
いつか自分も誰かの質問に答えられるようになれればと思います。
0497nobodyさん
2007/07/20(金) 09:43:19ID:Bm0qkr+0レコードは増えるんですが、idは追加されるものの、nameに値が入らないのです。
どんな原因が考えられるでしょうか?
<?php
extract($_post);
mysql_connect('localhost','root','oraora');
mysql_select_db('test');
$sql = "insert into dbtest values(0,'$name')";
mysql_query($sql);
?>
<form action="adodb_write.php" method="post">
名前:<input type="text" row=1 name="name"></input><input type="submit"></input>
</form>
0498nobodyさん
2007/07/20(金) 09:49:58ID:Bm0qkr+0すみません、忘れてました、SQLのテーブル構造は以下の通りです
>>497のフォームでデータ送信して増えた部分はid=10(idはauto_increment)です
+----+-----------+
| id | name |
+----+-----------+
| 1 | simada |
| 2 | suzuki |
| 3 | sato |
| 4 | sirakawa |
| 5 | takahashi |
| 6 | saito |
| 7 | ito |
| 8 | ueda |
| 9 | takada |
| 10 | |
+----+-----------+
0499nobodyさん
2007/07/20(金) 09:59:23ID:???$_POSTじゃない?
0500nobodyさん
2007/07/20(金) 10:04:37ID:vU4cROZQアップ完了までのプログレスバーはどうやって実装するのでしょうか?
普通は完了するまで画面は表示されませんよね?
0501nobodyさん
2007/07/20(金) 10:25:50ID:Bm0qkr+0ありがとうございました、ちゃんと名前も追加されるようになりました。
ただ、、日本語で名前を登録すると追加されないです(アルファベット入力のみ受け付ける)
これはなぜでしょう?
phpはutf-8で保存、書き出し設定しています
mysqlの [mysqld] も default-character-set=utf-8 としているんですが
0502nobodyさん
2007/07/20(金) 10:26:29ID:???0504nobodyさん
2007/07/20(金) 10:55:13ID:Bm0qkr+0すみません、レコードが追加されないのです
| 8 | ueda |
| 9 | takada |
| 10 | noda |
+----+-----------+
上記のように、 アルファベットでの名前 nodaのレコードは追加されても
「野田」と入力して送信しても
| 10 | noda |
+----+-----------+
上記のまま、id=11・name=野田 のレコードが追記されません なぜでしょう?
0505nobodyさん
2007/07/20(金) 11:55:01ID:xSJ/fCQP横レスですまんが、野田って、今年の3月に○立情報の案件で、
引継ぎも何もしないで、プロジェクトの途中で勝手に抜けた奴じゃなねーだろな。
あれから、めちゃめちゃ俺が引き継いで大変だったんだけど。
本人だったら、殴ってやりたいんだけど。
0506nobodyさん
2007/07/20(金) 12:00:28ID:???0507nobodyさん
2007/07/20(金) 12:09:19ID:???pukiwikiにはEUCとUTFの2種類あります。
EUCでほげほげをエンコードすると、『%A4%DB%A4%B2%A4%DB%A4%B2』となり、
UTFでほげほげをエンコードすると、『%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92』となります。
これを共通にデコードして同じ『ほげほげ』を出力したいのですが、
EUCで表示するUTFが文字化けし、UTFで表示するとEUCが文字化けしてしまいます。
これを防ぐにはどのような書き方をすればよいのか教えていただけませんでしょうか?
<?php
header("Content-Type: text/html; charset=EUC-JP");
$euc = "%A4%DB%A4%B2%A4%DB%A4%B2";
$utf = "%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92";
echo rawurldecode($euc)."<br>\n"
. rawurldecode($utf);
?>
0508504
2007/07/20(金) 12:12:25ID:Bm0qkr+0プギャーww ワロw
0509nobodyさん
2007/07/20(金) 12:16:31ID:vU4cROZQむぅ、ajaxが必要ですか…
バッファじゃ不完全ですよねぇ
0510nobodyさん
2007/07/20(金) 12:16:53ID:???0513507
2007/07/20(金) 12:57:51ID:9levxhBtもう1つ言い忘れたのですが、
エンコード済みのほげほげに該当する部分は、
外部から受け取る値になるので、
受け取った時点で、どの文字コードか調べたいのですがそんな関数ありますか?
>>511
rawurlencodeの引数にはそんなオプションはありませんでしたが、
なんか他の方法でできるのでしょうか?
どっちにしろ受け取った値がどの文字コードかわからないといけませんね。
0515nobodyさん
2007/07/20(金) 13:00:27ID:???$euc = "%A4%DB%A4%B2%A4%DB%A4%B2";
$utf = "%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92";
$euc = urldecode($euc);
$utf = mb_convert_encoding(urldecode($utf), "EUC-JP", "UTF-8");
0516nobodyさん
2007/07/20(金) 13:10:03ID:???0517nobodyさん
2007/07/20(金) 14:15:55ID:Z+yQ2M+4どのようにすれば対処できるのでしょうか?
文字コード:JIS
関数:mail()
どこかで携帯にメールするときは文字コードはJISでmail()関数を使うのが正しいといわれたのですが・・・
0518517
2007/07/20(金) 14:28:50ID:Z+yQ2M+4本文は文字化けせずにちゃんと届きます。
ちなみにSubject、Body共に「JIS」で送信しています。
0519nobodyさん
2007/07/20(金) 14:31:51ID:???それで検索してみたら?
0521517
2007/07/20(金) 14:40:25ID:Z+yQ2M+40522虚弱PHP
2007/07/20(金) 14:51:51ID:???http://www-06.ibm.com/jp/developerworks/opensource/library/os-php-v525/index.shtml
0523nobodyさん
2007/07/20(金) 14:51:55ID:???$enc_arr = split( ",", "ASCII,UTF-8,EUC-JP,SJIS" );
function fEncCvt($cvt_value) {
global $enc_arr;
$strDefEnc = mb_detect_encoding ( $cvt_value ,$enc_arr, TRUE );
if( $strDefEnc != DEF_HTTP_ENC ) {
$cvt_value = mb_convert_encoding($cvt_value, DEF_HTTP_ENC, $strDefEnc ); }
return $cvt_value;
}
$hoge = fEncCvt($hoge);
0524nobodyさん
2007/07/20(金) 14:53:35ID:???>PHP V5.2 の新機能、第 5 回: ファイル・アップロードの進行状況を追跡する方法
>PHP V5.2 の新機能、
>V5.2
orz
0525nobodyさん
2007/07/20(金) 14:53:50ID:ETH2C+0h登録フォームなどでHTMLのセレクトタグをセッションし確認画面でセレクトタグの選んだものを表示し、
その後戻るボタンなどで登録フォームに戻ったときセレクトタグの選んだものの状態を維持させたいのですがどうすればいいでしょうか?
0527nobodyさん
2007/07/20(金) 14:59:24ID:???http://headlines.yahoo.co.jp/hl?a=20070719-00000316-yom-pol
0528nobodyさん
2007/07/20(金) 15:00:25ID:m5o2VFCm0529nobodyさん
2007/07/20(金) 15:10:47ID:i+qd4INk0531507
2007/07/20(金) 15:15:18ID:???どうもありがとうございます。
mb_convert_encodingでやるのですね。
そのコードを使わせていただいたところ両方とも正常に表示されました。
あとは受け取った値の文字コードを調べる方法を模索してみます。
>>523
どうもありがとうございます。
その関数を使わせていただいたところ、
DEF_HTTP_ENCのところでエラーが出ました。
定数のようですが未定義ですよね?
0533nobodyさん
2007/07/20(金) 15:25:51ID:i+qd4INk進むボタンを押したらデータベースを取得して次のIDが表示される仕組みをつくりたいんです
0534nobodyさん
2007/07/20(金) 15:31:52ID:???実装例は
http://www.pixeline.be/experiments/jqUploader/test.php
とかだね(jqueryを使用したプラグイン)
あとphpとは外れるが flash + javascriptだと
http://swfupload.mammon.se/index.php
なんてのもある。
いろいろ面白い物もあるので、実装例を探してみて動かしてみる事を勧める。
あと、ajaxは、結構情報は豊富なんで、有る程度までは簡単なりよ。
0535nobodyさん
2007/07/20(金) 15:39:26ID:arPnDzjZ「.+」では一行だけしか検索できません。
改行を含む不特定の文字を表すメタ文字はないのでしょうか?
また、ない場合、どんな方法で検索したら良いのでしょうか?
0537nobodyさん
2007/07/20(金) 15:40:11ID:???/example.com/Ums
で俺の場合いけたが
0538nobodyさん
2007/07/20(金) 15:40:46ID:???0539nobodyさん
2007/07/20(金) 15:57:06ID:???だから質問の情報不足
DBがわからんから次へのボタンを表示するときに
まえもって次の番号をDBから引き出しておいてその値をサブミット
しろとしかいいようが無い
0540nobodyさん
2007/07/20(金) 16:06:44ID:Z+yQ2M+4たとえば
$name="田中";
$age = "68";
INSERT INTO (name) VALUES ('{$name}')
INSERT INTO (age) VALUES ('{$age}')
こんな感じのを1行にまとめたいんですが・・・
これはMySQL板で聞いたほうがよさげですか?
0541nobodyさん
2007/07/20(金) 16:06:50ID:???まずは
http://www.google.co.jp/search?q=php+%E5%85%A5%E9%96%80+%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9+%E6%9C%AC&btnG=%E6%A4%9C%E7%B4%A2&hl=ja&rlz=1B3GGGL_jaJP210JP210
この辺で、入門の本を探して練習汁
0542nobodyさん
2007/07/20(金) 16:10:16ID:???つっこみどころ満載なので、ソースに関してのコメントは控える。
まずは
http://www.google.co.jp/search?q=mysql+%E5%85%A5%E9%96%80++%E6%9C%AC&btnG=%E6%A4%9C%E7%B4%A2&hl=ja&rlz=1B3GGGL_jaJP210JP210
とかでまず入門本から探して勉強始めたほうがよいかと。
0543nobodyさん
2007/07/20(金) 16:13:01ID:Z+yQ2M+4ごめ、直書きだったから素で間違えた
INSERT INTO tbl_1 (name) VALUES ('{$name}')
INSERT INTO tbl_2 (age) VALUES ('{$age}')
これを1行でやりたい
つまり、どちらかでエラーが出れば両方INSERTせずにすむから・・・
2行で実行すれば、どちらかがエラー出ても片方がINSERTされます。
(SQLの絵本はあるのですが、載っているサブクエリはSELECTのみでした。)
0544nobodyさん
2007/07/20(金) 16:19:08ID:???激しくphpと関係無いが、、
一発インサートはできん その変わりロールバックの仕組みを使う。
transaction rollback commit mysql php で検索汁、
0545nobodyさん
2007/07/20(金) 16:21:22ID:???ソフトバンクへだけタイトルが文字化けしてしまいます。
mb_language("japanese");
mb_internal_encoding("SJIS");
$header = "From: $from.\n";
$header .= "Return-Path: $from.\n";
$header .= "Reply-To: $from.\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: text/plain;charset=Shift_JIS\n";
$header .= "Content-Transfer-Encoding: 7bit\n";
$error = mail($to,$title,$data,$header);
文字コードはSJISで、$title / $data もSJISです。
文字化けしない方法はないでしょうか?
ちなみに、ISO-2022-JISにすると本文も文字化けしてしまいます。
0547nobodyさん
2007/07/20(金) 16:23:30ID:???SQL開始時にBEGINして
問題があればROOLBACK
問題が無ければCOMMITして完了
BEGINからCOMMITするまでの間はひとつの動作として扱ってくれる
0548nobodyさん
2007/07/20(金) 16:33:05ID:Z+yQ2M+4有難うございます。
それはPHP側で個別にクエリ送信した場合にでも反映されるのでしょうか?
たとえば
mysql_query("BEGIN","DB");
mysql_query("処理1","DB") or exit("Error!");
mysql_query("処理2","DB") or exit("Error!");
mysql_query("BEGIN","DB");
こんな感じで個別にしても大丈夫なのでしょうか?
0550nobodyさん
2007/07/20(金) 16:52:38ID:7y+txqHq0553nobodyさん
2007/07/20(金) 16:57:26ID:???例:2007-03-31
0554nobodyさん
2007/07/20(金) 17:00:37ID:???0559nobodyさん
2007/07/20(金) 17:08:42ID:???0563nobodyさん
2007/07/20(金) 17:11:55ID:???0564nobodyさん
2007/07/20(金) 17:13:46ID:arPnDzjZ>>535
お願いします
0565nobodyさん
2007/07/20(金) 17:13:51ID:???↑これからタイムスタンプ出す方法をきぼんぬ
0568nobodyさん
2007/07/20(金) 17:16:38ID:???もっと具体的にお願い。
検察したい文字列の見本と、(どの部分にマッチしてほしいのか補足つきで)
自分で書いてみたソースを全部出して。
0570nobodyさん
2007/07/20(金) 17:37:55ID:i+qd4INkというエラーが出るんですがどうすればいいんでしょうか
■ このスレッドは過去ログ倉庫に格納されています