【PHP】下らねぇ質問はここに書き込みやがれ Part19
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/04/09(日) 01:31:18ID:???ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
本スレ【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/
【PHP】下らねぇ質問はここに書き込みやがれpart18
http://pc8.2ch.net/test/read.cgi/php/1142417901/
過去スレは>>2-3あたり
0495490
2006/04/18(火) 12:50:33ID:???レスありがとうございます。
フォームを書いている部分のソースを晒してみます。
function putForm($ua,$setting,$cate) {
echo '<div class="titlebox"><h2 class="diarytitle_2">admin mode</h2></div>';
echo '<form enctype="multipart/form-data" action="admin.php" method="post">';
echo 'title <input type="text" size="60" name="title"><br>';
echo 'category<select name="cat">';
echo '<option value="">--</option>';
while (list($key, $val) = each($cate)) {echo "<option value=$key>$cate[$key]</option>";}
echo '</select><br>';
echo '<textarea rows="6" cols="60" name="honbun"></textarea><br>';
echo '<input type="file" name="uploadfile"><br>';
echo '<input type="hidden" name="action" value="write">';
echo '<input type="submit" value="write">';
echo '</form>';
}
(原因を削除してしまうのを回避するために、関数部分まるごとコピペしました)
0497446
2006/04/18(火) 13:19:13ID:QNgm/uExどうみても素人です。本当にありがとうございました。
0498490
2006/04/18(火) 13:54:39ID:???ご意見ありがとうございます。
implodeを使うと、formのhiddenで渡している値なども、
まとめてログに格納されてしまうので・・・
あ。
POSTされた内容を$postに丸投げ($post = $_POST)しているから、
そんなことになるのですね。
$post[]の内容を整理して、implodeで見通し良くログを作成したいと思います。
ありがとうございました。
0499nobodyさん
2006/04/18(火) 14:58:11ID:???> while (list($key, $val) = each($cate)) {echo "<option value=$key>$cate[$key]</option>";}
この$cateはどこでどういう風に作ってるんだ?
そこでゴミ入れちゃってるんじゃないかと思うんだが
0500490
2006/04/18(火) 15:01:51ID:???> この$cateはどこでどういう風に作ってるんだ?
別ファイルにて$cateの設定をしております。
$cate => カテゴリーの意 です。
$cate = Array (
'news' => 'おしらせ',
'music' => '音楽',
'baseball' => '野球',
'game' => 'ゲーム',
'yota' => 'ヨタ話',
'test' => 'テスト'
)
こんな感じです。趣味がバレて(*‘ω‘ *)ィャンですが。
0501nobodyさん
2006/04/18(火) 15:10:49ID:ksf2FOYQxamppにて環境を構築しています
ファイルのアップロードをPHPで実現しようとscriptを組みましたがファイル名によっては正常にアップロードされない場合があります。
アップロード前に適当な長い文字にリネームすると正常に動作するのですが、これは私の綴りに誤りがあるからなのでしょうか。
web上でphp scriptを配布されている方のscriptも走らせて見たのですが全く同じ現象で、どこが悪いのかさっぱりです。
何かバグや仕様などあるのでしょうか?
0503501
2006/04/18(火) 15:19:11ID:ksf2FOYQレス有難う御座います。
そしてすいません。
肝心な部分が抜けていました。
FILE_003.jpgが通らず、200601071530000.jpgは問題無し
前者をリネームし00aerasfsaf5.jpgにしてみましたが通らずといった感じです。
$upfile_name = $_FILES["image"]["name"];
$upfile = $_FILES["image"]["tmp_name"];
$path = dirname($_SERVER[PATH_TRANSLATED]).IMG_DIR;
if (file_exists($upfile)) {
$dest = $path.$upfile_name;
move_uploaded_file($upfile, $dest);
$ext = substr($upfile_name,-4);
rename ($dest,$path.date("20ymdhis").$ext);
$imgname = date("20ymdhis").$ext;
echo $size = getimagesize($path.$imgname);
$W = $size[0];
$H = $size[1];
0504nobodyさん
2006/04/18(火) 15:21:28ID:ksf2FOYQ原因があるとしたら、ファイル名処理が怪しいですかね。
ケツから三行目にechoとか入ってますが、なんちゃってデバッグでちゃんと取得できているか試してた名残です(汗
0505nobodyさん
2006/04/18(火) 16:04:58ID:???以下で同じ駄目だというファイル名で実験したが普通に動いているぞ?
<?php
$upfile_name = $_FILES["image"]["name"];
$upfile = $_FILES["image"]["tmp_name"];
$path = dirname($_SERVER[PATH_TRANSLATED]).'/upfile/';
if (file_exists($upfile)) {
$dest = $path.$upfile_name;
move_uploaded_file($upfile, $dest);
$ext = substr($upfile_name,-4);
rename ($dest,$path.date("20ymdhis").$ext);
$imgname = date("20ymdhis").$ext;
echo $size = getimagesize($path.$imgname);
$W = $size[0];
$H = $size[1];
}
?>
<html>
<head>
<title>テストたぼけたれ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor="#FFFFFF">
<form action="./0.php" method="post" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" value="送信">
</form>
</body>
</html>
0507nobodyさん
2006/04/18(火) 16:15:06ID:???0508501
2006/04/18(火) 16:39:57ID:???仰るとおりファイルサイズ制限によるものでした。
PHPマニュアルから関数を調べてサンプルコードをコピペした際、隠し要素のMAX_FILE_SIZEをそのままにしていたのが原因でした。
初歩的なミスで申し訳ないです。
テンパってると簡単なミスにも気づかないものですね........
0509nobodyさん
2006/04/18(火) 16:53:20ID:???$imageの後ろにゴミが付くのなら分かるが(これだと改行コードが付くだろう)
$catの方に付くってのはわからんなー
0510490
2006/04/18(火) 16:59:31ID:???レスありがとうございます。
当面は「ゴミ付データをrtrimする」という場当たり対処で乗り切りますです。
・・・目覚めは悪いですが、現状の自分のスキル不足だと割り切ります。
これから勉強していくうちに、解決策も思いつくかもしれませんし(つД`)
レスをいただいた諸氏へ感謝(。・ω・。)ゞ
0511nobodyさん
2006/04/18(火) 18:30:12ID:???$err['name'] = 'エラーメッセージ';
if( 入力チェック )
$err['tel'] = 'エラーメッセージ';
if( 入力チェック )
$err['address'] = 'エラーメッセージ';
のような入力チェックを作ったとして、
表示側を下みたいにした時、
<?= $err['name'] ?>
<input type="text" name="name"><br>
<?= $err['tel'] ?>
<input type="text" name="tel"><br>
<?= $err['address'] ?>
<input type="text" name="address"><br>
error_reportingの設定によってUndefinedが出るんだけど、
error_reporting関数か.htaccessを使って設定を変えるのと、
表示側を
<? if( isset($err['name']) ){ echo $err['name']; } ?>
とするのとどっちがいいんだろう?
0512nobodyさん
2006/04/18(火) 18:42:51ID:FgrLDE8s分数(秒数)単位で結果を出力させるにはどうしたらいいでしょうか?
http://iodine-127.no-ip.info/math/countdown.php
こんな感じなんですが、文字で出力させたいのです・・・
0513nobodyさん
2006/04/18(火) 20:30:38ID:???http://pear.php.net/package/PHP_Beautifier
0514nobodyさん
2006/04/18(火) 20:31:20ID:0MA4uQo3phpのファイルはエディタの設定をシフトJISにしています。ヘッダのcharsetはshift-jisです。phpmyadminの最初のページで、languageをjapanese(ja-sjis)にしています。php.iniのmbstringの項目ではmbstring.internal_encoding = SJISになっています。
以上が全て同じなら、文字コード的に問題無いでしょうか?作ったシステムは今のところ正常に動いています。
それと、なんだかんだいってEUC-jpでつくるのがベストみたいな話を聞いたのですが、なぜでしょうか?
よろしくお願いします。
0515nobodyさん
2006/04/18(火) 21:24:39ID:ezAkcLQV指定したディレクトリで指定した拡張子のMIME typeが何と設定されてるか
httpd.confやら.htacccessやら調べて取得してくれる関数ってありませんか
0516nobodyさん
2006/04/18(火) 23:04:17ID:???「なんだかんだでEUC-JP」の理由が理解できないうちは、
なんだかんだでEUC-JPにしとくといいと思うよ。
EUC以外のエンコードを採用するのに確固たる理由や確信が持てるように
なったら、それにすれば良いとです。
0518470
2006/04/19(水) 00:05:26ID:???http://s2.muryo-de.etowns.net/~teti/tools.phps
どっかエラーがありそう。
文字コード「EUC」の改行コード「LF」に変換してからしか使えないし
何か、良い方法無いかな・・・
0519nobodyさん
2006/04/19(水) 00:16:42ID:47s4d2RMというか、2byte文字が入っていると$_FILES['upfile']['name'];でファイル名が収得できません。
拡張子のみが返ってきます。
英数字のみのファイルはアップロード出来るので、2byte文字が原因だとは思うんですがどうすればいいのでしょうか?
$filename = $_FILES['upfile']['name'];
$enctype = mb_detect_encoding($filename);
$filename = mb_convert_encoding($filename,"EUC-JP","enctype");
if (move_uploaded_file($_FILES['upfile']['tmp_name'],$updir.$filename)
== FALSE){
print("アップロードに失敗しました。");
}else {
print( $filename . "アップロードしました。");
}
0520nobodyさん
2006/04/19(水) 00:43:16ID:???たとえばDBとコネクトするごとにtryしたほうがいいのか
クエリを発行するごとにtryしたほうがいいのか・・・
皆さんは例外結構使ってまつか?
0521514
2006/04/19(水) 01:05:36ID:3WMC/UyZレスありがとうです。
SJISとかのデメリットってなんですかねぇ?
たまにUTF8を激しく推奨みたいのも見かけますし、
なにがいいのかわからないです。
自分的にはSJISが好きなのですが、予期せぬ\マークがでたりしますが、htmlspecialcharsとかstripslashesをやると消えるので、
あまり不具合も感じません。
具体的なお話がきけると有り難いです。
よろしくお願いします。
0522nobodyさん
2006/04/19(水) 01:48:03ID:???DBへ値を保存するときにはちゃんと文字コードを意識しなければだめ。
最近はサーバ環境がユニコードのためか、viでそのまま文字が読めることに
UTF-8はいいなと感じてる。
携帯はSJISがいいでしょ?
0523nobodyさん
2006/04/19(水) 01:51:48ID:???大抵サーバがEUCだからEUCでスクリプト書いておくと何か問題があったときにviとかで直接見られる。
サーバ上にあるスクリプトを直接見ることで、何者かの手によって勝手に改変されてないかわかる。
・・・てことより、バグ見っけたらサーバ上のスクリプトをコッソリ直すってコトの方が多いなw
だからEUCで書いてた方が楽なときが多い。
全てのサーバがnkfとか入れてるわけじゃないからね。特に海外のレンタルサーバなんて・・・
まぁコメントとか日本語使わなきゃいいんだけど、日本語のコメントなきゃサッパリ分からないしー
0524nobodyさん
2006/04/19(水) 01:55:59ID:???mb_** みたいなライブラリが使えない状況だと、EUC の方が圧倒的にコーディングが楽だよ。
SJIS は、文字列を途中から評価しようとしたとき、そのバイトが2バイト文字の一部なのか、そしてそれが何バイト目なのかがすんなり判断できない。
あと環境によっては、2バイト文字の一部に \ を含むものがあるというのがネックになる。
ヘタするとスクリプトのパースすら失敗するしね。
できるだけどこでも動くものを作ろうと思うと、SJIS よりも EUC の方が苦労しないと思う。
0525nobodyさん
2006/04/19(水) 01:58:44ID:???なんかちゃんと動いてんのかわかんねー
DBへの書き込み自体はうまく行ってるみたいだし
pg_query( 'begin' )だけで問題ないよね?
0527nobodyさん
2006/04/19(水) 02:53:15ID:???サンクスコ
0528nobodyさん
2006/04/19(水) 03:51:04ID:sslsiAd8PHPでオンラインテストを作る課題を出されました。
mySQLでtest、question、answerが含まれたテーブルを作ったんですが、このテーブル1つだけで
テストを選んだら複数の問題が表示される
1つの問題に3つの答えが表示される
3つのうち1つだけが正解
というスクリプトは書けるでしょうか?
0529nobodyさん
2006/04/19(水) 04:08:09ID:enTaLLydこういう場合は引数で渡して、こういう場合はglobal宣言っていう例ない?
0530nobodyさん
2006/04/19(水) 04:12:06ID:???書けなくはないけど、効率悪いか、問題のメンテナンスに難がある。
・テストに対して問題は1対多
・問題に対して選択肢は1対多(ただし3つ固定)
てことを考えると、テストと問題は別テーブル、回答は本来別テーブルだけど、
パフォーマンスに難があれば問題に含めても良い。
…全然PHP関係ないね。DB板向け。
0531528
2006/04/19(水) 04:32:32ID:sslsiAd8最高でもテーブルは2つまでとのことなので、テーブルを2つ作り、テストのみ、問題と回答1、回答2、回答3というようにしたらいいでしょうか?
正解の回答も回答4などとして加えてスクリプトで、選んだ回答が回答4のとき、などと書いて正解を確かめるんでしょうか?
最初DB板で似たような質問したのですが普通にスルーされまして・・・(;´Д`)
PHPのスクリプトの問題なのかと思いこちらで質問させていただきました。
0533528
2006/04/19(水) 04:51:23ID:sslsiAd8分かりました。
どうもすいませんでした。
0534nobodyさん
2006/04/19(水) 07:22:37ID:???使う変数は前もって定義しておく
$err['name'] = "";
$err['tel'] = "";
$err['address'] = "";
0535nobodyさん
2006/04/19(水) 07:29:27ID:???ファイル名の最後が表とかで終わってるんじゃない
htmlの出力をshift jis以外にするしかないと思う
0536nobodyさん
2006/04/19(水) 09:08:20ID:???文字化けとかセキュリティ的な問題とか山のようにある。
http://d.hatena.ne.jp/t_komura/20060122#1137944280
携帯とかSJISのほうがいい場合は、出力直前にSJISにコンバートすりゃいい。
(ただ、最近の携帯はパソコンとほぼ同じく複数のエンコードに対応してるからEUCがオススメ)。
で、スクリプトの内部やDBではEUCで統一したほうが圧倒的に楽。
0537nobodyさん
2006/04/19(水) 09:34:24ID:???0538nobodyさん
2006/04/19(水) 09:44:08ID:???0539nobodyさん
2006/04/19(水) 09:58:26ID:???へぇ、こんなSQLインジェクションのテクニックがあったんだね。
今までSJISを避けてきたけど、SJIS使わされるハメになったら穴だらけになるところだった。
危ない危ない
0540nobodyさん
2006/04/19(水) 10:27:12ID:???SJISにこだわる理由を聞け、理由を。
っていうかそんな客なんか切るか、もしくは
「セキュリティ強度が低下しますけどいいんですね?
または強度を維持したいなら見積もり額アップしますけど」
って言えよ。
0541nobodyさん
2006/04/19(水) 10:34:25ID:???IE5の時代はよくあった
0544nobodyさん
2006/04/19(水) 11:12:26ID:???0545nobodyさん
2006/04/19(水) 11:13:47ID:???0551nobodyさん
2006/04/19(水) 12:13:20ID:???途中にあっても駄目
ディレクトリの区切り記号"\"と判定されるから
表などであって他にもある
結論はシフトジスは使わない
0552nobodyさん
2006/04/19(水) 12:13:34ID:FFPzklJQhttp://8909.teacup.com/tomi/bbs
0553nobodyさん
2006/04/19(水) 13:11:01ID:???if (!file_exists($log)){
$logが見つからなかったらパーミッション666で$logを自動生成する
}
といったことをやりたいのですが、
fopenを使った場合、ログファイルなのでパーミッションを666にしたいのですが、
パーミッションが644になってしまい(Xrea使ってます)、
ディレクリの権限を変更しないと(707や777等)作成されませんでした。
なんかいい関数とか方法ありませんでしょうか?
functionで作れるような腕はもっておりませんorz
0555nobodyさん
2006/04/19(水) 13:22:07ID:???ハァ??
PHPで動作しないと思われる文字エンコーディングの例を以下に示します。
JIS, SJIS, ISO-2022-JP, BIG-5
これらのエンコーディングで書かれたPHPスクリプトは、特に符号化された文字列がスクリプトで記述子やリテラルに使用される場合には、動作しない可能性がありますが、
入力されるHTTPクエリに関してmbstringの透過的なエンコーディングフィルタを設定することでこれらのエンコーディングをほとんど使用しないようにすることができます。
注意:
SJIS, BIG5, CP936, CP949, GB18030 は、読者がパーサ/コンパイラ、文字エンコーディングと文字エンコーディングの問題点について精通していない限り内部エンコーディングとして使用するべきではありません。
0557nobodyさん
2006/04/19(水) 13:42:26ID:???デフォでは使えないということは、対応してないというわけではない。
(デフォで対応してないのはmb系全般そうだけど)
そこの説明は「非推奨。使用する場合は注意すること」っていう説明。
0558nobodyさん
2006/04/19(水) 13:53:00ID:???SJIS使ってるときにエスケープでaddslashesなんて使う方が悪い気がするけど。
mysql_escape_string使ってれば全角文字をちゃんと認識してエスケープできる。
0562nobodyさん
2006/04/19(水) 14:51:21ID:yEjSiGYT使っているキーボードは日本語配列ですか、それとも英語配列ですか?
双方のメリット、デメリットと合わせて教えて下さい。
0563nobodyさん
2006/04/19(水) 14:59:01ID:???日本語
メリット ここは日本で私は日本人だから
デメリット 特に無し
個人的にはそんなものよりキーを押したときの硬さなどが気になる…
長時間やっても疲れないのが一番!!
0565563
2006/04/19(水) 14:59:56ID:???0567nobodyさん
2006/04/19(水) 15:28:38ID:???0568nobodyさん
2006/04/19(水) 15:34:30ID:???0569nobodyさん
2006/04/19(水) 16:23:24ID:???どうすればよかとでしょうか?
0570nobodyさん
2006/04/19(水) 16:42:28ID:???日本語配列のメリット:慣れてると打ちやすい デメリット:慣れてないと打ちにくい
英語配列のメリット:慣れてると打ちやすい デメリット:慣れてないと打ちにくい
0572nobody
2006/04/19(水) 18:05:49ID:k/ExYNcl半角カナ文字のみ条件だと文字化けします。
A.php(「検索」を押すとB.phpが実行)
<input type=text name="hankaku_kana">
<input type=text name="zenkaku_kana">
<input type="button" value="検索">
B.php
$sql = "select * from Table where col = *";
if(hankaku_kana != NULL)
$sql = $sql."and col = hankaku_kaa";
if(zenkaku_kana != NULL)
$sql = $sql."and col = zenkaku_kana";
このとき、zenkaku_kanaに全角文字が入っていると
検索できるんですが、
半角文字だけだと文字化けします。
どうしたらできますか?
0573nobodyさん
2006/04/19(水) 18:12:08ID:???オレsjisで作ったコトある・・・しかも商用orz
0574nobodyさん
2006/04/19(水) 18:14:58ID:???よく分からないなら、UTF-8 使っとけ。
EUC-JPに比べてUTF-8を使うメリット
・最近のUnix/Linux系OSではUTF-8が標準であることが多い
・国際標準なのでどの言語でも利用できる
・Windows/Macでも内部コードとして使われてきている
0575nobodyさん
2006/04/19(水) 18:19:29ID:???超大手商用サイトでもShift_JIS使ってるとこなんていくらでもあるよ
当たり前な日本語になるが、問題なければ問題ない
0576nobodyさん
2006/04/19(水) 18:39:05ID:???・UTF-8は日本語が3バイト(EUC-JPはほぼ2バイト)だから容量制限にひっかかる(DBが5MBの某鯖とか)
・Winのメモ帳などでいじるとBOMがついて誤作動する
ただ
・DBの文字コードとスクリプトの文字コードは同じほうが効率が良い
・SQLiteはUTF-8/16推奨
0577572
2006/04/19(水) 18:51:40ID:k/ExYNcl0578nobodyさん
2006/04/19(水) 18:54:06ID:???0579nobodyさん
2006/04/19(水) 18:55:51ID:???0580nobodyさん
2006/04/19(水) 19:22:43ID:???つかUTF-8とかならともかく日本語環境でなんでEUCを内部コードに使うのかわからん
0581nobodyさん
2006/04/19(水) 19:53:22ID:???0582nobodyさん
2006/04/19(水) 20:08:41ID:yEjSiGYTサーバの文字コードとDBの文字コードとスクリプトの3つを気にしなきゃいけないのですか?
0583nobodyさん
2006/04/19(水) 20:15:11ID:???サーバの文字コードとDBの文字コードとスクリプト内部処理の文字コードと
HTML出力の文字コードの全てを「UTF-8」にすれば完璧です。
それ以外の心配はいりません。
0584nobodyさん
2006/04/19(水) 20:27:20ID:lD0hd5jB$myArray_sum = array_sum($myArray)
これでは値が0になってしまいorz
配列自体に数値が入っているのは確認しました。
配列の配列 array_sum/二次元配列 array_sum/等
でググったんですけど分かりませんでした。ど
うやったらいいでしょうか?
よろしくおながいします。
PHP Version 4.3.9
0585nobodyさん
2006/04/19(水) 20:28:17ID:yEjSiGYTレンタルサーバでも変更できますか?
0586nobodyさん
2006/04/19(水) 20:40:02ID:???$myArray_sum = 0;
foreach($myArray as $a) $myArray_sum += array_sum($a);
かなぁ
もっと簡単な方法ってあるのかな。
0587nobodyさん
2006/04/19(水) 20:45:19ID:???掲示板のようなもので、データを書き込んだら
なぜか「ソ」のあとに\が付くんですが、なぜでしょう。
カタカナを確かめるとソ以外の後ろには付きません。
htmlspecialcharsと、str_replaceで、改行、キャリッジリターンを<br>で変換する処理をしたあと、
ログに書き込んでいます。ログに書き込まれた時点で\が付いてるので表示の問題ではないようです。
お願いします。
0589587
2006/04/19(水) 20:51:57ID:???0590nobodyさん
2006/04/19(水) 20:55:12ID:???OS自体の文字コード。
WindowsはShift_JISで変更不可。
Fedora Core (Linux) なら UTF-8 が標準。(設定で変更可)
かんたんに言えばこんなかんじだ。
0592nobodyさん
2006/04/19(水) 20:57:39ID:???ん、ケータイ用サイトの文字コードもUTF-8にしているよ。
auとtu-ka、WILLCOMは全機種UTF-8対応でしょ。
(ゲートウェイで変換されるから旧機種でも問題無い)
たしかDoCoMoもよっぽど古い機種じゃなけりゃ問題ないとおもう。
たぶんアクセス解析すりゃ98%以上がUTF-8対応じゃないの?
0593nobodyさん
2006/04/19(水) 20:58:05ID:???> EUC-JPに比べてUTF-8を使うメリット
> ・最近のUnix/Linux系OSではUTF-8が標準であることが多い
「多い」ってことは全部じゃない?
> ・Windows/Macでも内部コードとして使われてきている
「きている」ってことはやっぱ全部じゃない?
0594584
2006/04/19(水) 20:59:35ID:lD0hd5jBありがとうございました。
数もそう多くないんで処理できれば問題なかったんで。
加算代入の存在忘れてました。
0595nobodyさん
2006/04/19(水) 20:59:47ID:???全部では無い。
ただ、EUC-JPよりは利用率が圧倒的に高い。
> 「きている」ってことはやっぱ全部じゃない?
全部では無い。
WinはShift_JISの箇所が一番おおいしな。
EUCはUnix用のコードだからWinの内部コードではないっしょ。
■ このスレッドは過去ログ倉庫に格納されています