トップページ⇒php
1001コメント282KB

【PHP】下らねぇ質問はID出して書き込みやがれ 101

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/11/15(月) 13:00:07ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 100
http://hibari.2ch.net/test/read.cgi/php/1288168893/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0754nobodyさん2010/12/14(火) 14:04:34ID:???
>>749
解ってるじゃんかよwまどろっこしい奴め
0755nobodyさん2010/12/14(火) 14:06:49ID:???
>>743
うっわ過疎ってんな
っていうか初心者質問スレしか専門板にぎわってないんだよな
PHPについて適度な雑談するときも質問スレになっちゃってるし

初心者に優しくしてるとソイツが段々力付けてここの住人になってくれてにぎわうとゆー
0756nobodyさん2010/12/14(火) 14:08:57ID:???
規制+専門板名物キチガイ+板多すぎ
これで新規は質問スレにしか寄り付かないからな
0757nobodyさん2010/12/14(火) 14:12:52ID:???
んじゃあさ
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
でも「unicodeが含まれててもANSIで保存するぜ俺のphpは!」なんて事できんの?
何か俺ID出して質問したほうがいい気がしてきた・・・。
0758nobodyさん2010/12/14(火) 14:13:49ID:???
突如沸いたAJAXよりかはマシな流れだと思うけど
0759nobodyさん2010/12/14(火) 14:21:32ID:???
>>757
保存って変だし、
ANSIってのも変だ。 ANSIって何さw
0760nobodyさん2010/12/14(火) 14:22:18ID:???
ANSI Cしか思い浮かばんw
0761nobodyさん2010/12/14(火) 14:24:50ID:???
日本語ウインドウズだとShift_JIS
0762nobodyさん2010/12/14(火) 14:32:53ID:???
えっと、テキストファイルってのはデフォルトの文字コードがANSIになってる
そんでcharset=Shift_JIS"だとunicodeの文字を送るとサーバーは認識できないからANSIのテキストに変換されて保存される
charset=utf-8だとunicodeの文字を送るとサーバーは認識してテキストファイルにunicodeの文字でUTF8のテキストにそのまま保存される

ふぅ、まぁこんな所だ

んでUTF-8でunicode送ってもテキストファイルAはNSIのまま保存?
それは文字列の文字コード変換でも使えばいいんじゃねーの?
0763nobodyさん2010/12/14(火) 14:33:34ID:???
>>757
ほれ

<?php
mb_language("Japanese");
$a = "hoge.txt";
touch($a); //文字コードはOS依存(デスクトップで右クリ→ファイルを作成状態)
$s = mb_convert_encoding("あいうえお", "UTF-8", "auto");
file_put_contents($a, $s); //ここでUTF-8になる
0764nobodyさん2010/12/14(火) 14:39:04ID:???
ついでに
mb_detect_encodingで誤検出大作したほうがいいかも
0765nobodyさん2010/12/14(火) 14:45:10ID:???
テキストファイルってのはデフォルトの文字コードがANSIになってるってのは、
ウインドウズのメモ帳とかの話?
そしたら、そのまま保存すれば Shift_JISになります。
もちろん2バイト文字が入ってなければ ANSIコードで書かれたファイルと言ってもいいですけど。

ファイルの文字コードなんてないんだよ。なんの文字コードでかいてあるか、中身みないとわからないから
もしくは、読んでもわからないから文字化けするんだよ。
だから、このファイルはこの文字コードで書いたからなって指定するんだよ。
メモ帳で charset=utf-8 っていれて保存したのブラウザで見れば化けまっせ。
PHP関係ないな。
0766nobodyさん2010/12/14(火) 15:03:05ID:???
>>744>>757
ヘッダで指定しろよ
0767nobodyさん2010/12/14(火) 15:08:07ID:???
メモ帳で保存すると
     abcde  あいうえお
ANIS    5     10
UTF-8   5     15

だけどサーバー上は関係ねーからな
例えばレスしてログ作ってもunicodeがそのまま保存されても変換されても同じ
0768nobodyさん2010/12/14(火) 15:17:06ID:???
>>767
えっと、サーバーにアップすると文字コードが変わると思ってる人?
0769nobodyさん2010/12/14(火) 16:09:22ID:???
>>767
それとも、Ajax最強って思ってる人?
0770nobodyさん2010/12/14(火) 16:23:12ID:???
charset=shift-JISとなってるphpでunicodeの特殊文字をサーバーで処理したらどうなるの?
0771nobodyさん2010/12/14(火) 16:44:53ID:???
default_charsetのこと?
0772nobodyさん2010/12/14(火) 17:23:07ID:???
>>770 それは質問ですか?
0773nobodyさん2010/12/14(火) 17:26:56ID:???
漢字部分はShiftJISなりEUCなりUnicodeで変換されるんで
ANSIって1バイトコードのことだったような気がするんだが
0774nobodyさん2010/12/14(火) 17:28:53ID:???
>>772
質問する時はIDを出してくださいね
0775nobodyさん2010/12/14(火) 17:37:00ID:???
質問やない!
確認や!
0776nobodyさん2010/12/14(火) 17:40:37ID:???
大変よく出来ました。
0777nobodyさん2010/12/14(火) 17:42:13ID:???
はなまるっ!
0778nobodyさん2010/12/14(火) 17:45:41ID:???
センセイション!
0779nobodyさん2010/12/14(火) 17:46:36ID:???
>>773
変換されるって言ってるけど、何が変換してると思ってるんです?
メモ帳で漢字書きますよね? 1って打ったら31ってコードがはいるでしょ?
あって打ったら 82A0が入るわけでそれで終わり。 そのまま保存されるし、
そのファイル読み込んで表示しても何にも変わらない。PHPが処理しようがなにしようが。
ブラウザで表示させてもブラウザに渡されるのは 3182A0
これを 1あ って表示するかどうかはブラウザがこれはshift-jisだって教えてもらってた場合だけ。
0780nobodyさん2010/12/14(火) 17:54:34ID:???
>>779
その理屈でいうならwindowsは内部がunicodeであってメモ帳で保存するときに
指定した文字コードへ変換されるんだが
俺はメモ帳でもUTF-8で保存するけどな
0781nobodyさん2010/12/14(火) 18:02:10ID:???
うそつけ変換されるか
0782nobodyさん2010/12/14(火) 18:12:08ID:???
>>781
0783nobodyさん2010/12/14(火) 18:14:13ID:???
XPまでのnotepad.exeはSJISのみ対応だったよな

>>780
内部がunicodeなら開く時に文字化けしています。
0784nobodyさん2010/12/14(火) 18:23:49ID:???
>>780
メモ帳でUTF-8で保存するとBOMでろくなことにならんけどな。

ANSIやっとわかったよ。
メモ帳で CP932で保存するのをANSIって選択させやがるのなwwww
0785nobodyさん2010/12/14(火) 18:30:18ID:???
まあWindowsプログラマだとしたらShift_JISよりもANSIって言いたくなるかもしれない
0786nobodyさん2010/12/14(火) 18:32:51ID:???
ならんってw
0787nobodyさん2010/12/14(火) 18:40:35ID:???
>>783
内部ってファイル内部じゃなくてメモリの話ね
うさみみハリケーンで調べたけどメモリではUTF-16のLEで格納されてた
0788nobodyさん2010/12/14(火) 18:44:38ID:???
今調べてみたけど、
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
でフォームからあ*1000を送ってテキストに保存させたら2KB
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
でフォームからあ*1000を送ってテキストに保存させたら3KBだった
0789nobodyさん2010/12/14(火) 18:46:43ID:???
散々言ってた保存ってのはそのことか。
わからんよw
0790nobodyさん2010/12/14(火) 18:49:02ID:???
お前ら同じような事話してるようで全くまとまりがねぇ!
少なくとも4人は全く別の話してるぞ!
0791nobodyさん2010/12/14(火) 18:50:38ID:???
関係ないと思うのを読み飛ばせ。
できなきゃここでいろいろ知るのは無理だw
まともに答えてるの俺ともう一人しかいないけどな。
0792nobodyさん2010/12/14(火) 18:51:19ID:???
おまえだれだよw
0793nobodyさん2010/12/14(火) 18:54:07ID:???
だから最初からAjax使えと言っただろ。
0794nobodyさん2010/12/14(火) 19:03:41ID:???
WindowsならCP932じゃないのか
0795nobodyさん2010/12/14(火) 19:07:16ID:???
っつーかAjaxってPHPよりJavaScriptって感じじゃねぇー?
0796nobodyさん2010/12/14(火) 19:09:31ID:???
鯖側の話だろ
0797nobodyさん2010/12/14(火) 19:12:13ID:???
>>788
UTF-8は全角文字1個ごとに制御文字つけるからバイト数がかさむ
UTF-16は全部2バイトコードにしてあたまに制御文字つけるだけ
そのかわり1バイト文字も2バイトになる
全角文字ばかりならUTF-16で保存すればShift-JISとあまり変わらない
ただPHPだとUTF-16ってイマイチ扱いづらそうな印象なんだがどうなんだろうな
0798nobodyさん2010/12/14(火) 19:16:06ID:???
>>797
BOMの読み飛ばしとか保存のときに先頭につけるの手動でね
0799nobodyさん2010/12/14(火) 19:25:46ID:???
JavaScriptのXMLHttpRequestを使ってサーバに非同期でリクエストを送ることができる
サーバからはレスポンスとしてXMLを送ってもらい(プレーンテキストなら何でもいいが)
そのXML(プレーンテキスト)を解釈して結果をJavaScript側で判断するってのが流れだ

サーバに問い合わせる内容が例えばユーザ名の重複チェックだった場合
PHPへリクエストを送りPHPからRDBMSへユーザの照会を行い
重複してるかしてないかの結果と何か便利な付加的な情報があれば加えて
それらRDBMSから取得した情報をXML(実際はry)として送出(レスポンス)する
このように動的にXMLなどのデータを作成して送る必要があるため
必ずサーバサイドの言語と連携する必要がある

俺ってやさしいね
0800nobodyさん2010/12/14(火) 19:27:21ID:???
静的ファイル読み込んでJSで処理してもいいんだけどね
0801nobodyさん2010/12/14(火) 19:28:03ID:???
まあユーザ名の処理なんかはサーバーサイドでやらないとな
0802nobodyさん2010/12/14(火) 19:37:11ID:xhJxB9zD
Linuxで動くシステムを開発しています。

XAMPPを使ってローカルである程度の動きを実装したいと考えていますが
フォルダの階層を表示するときに
Linuxだと/、windowsだと\になります。当然ですが。

プログラム中でファイルをインクルードするときに
パスを記述するときにこの違いはどの様にして対応してますか?

DIRECTORY_SEPARATORをつかってパスを記載してますか?

PHPの設定ファイルとかで簡単にパスの区切り文字を
windowsでも/にする方法とかはありますか?

0803nobodyさん2010/12/14(火) 19:38:21ID:???
なんか今日俺がどれだけ文字コードちゃんの理解が足りなかったかよくわかった
ごめんねUTF-8ちゃん
0804nobodyさん2010/12/14(火) 19:41:35ID:???
相対パスにするから意識しない
0805nobodyさん2010/12/14(火) 19:43:26ID:???
同じく相対だなー
絶対パスに指定するとしても1箇所のみでそこは
DIRECTORY_SEPARATORを使って書く
0806nobodyさん2010/12/14(火) 20:01:09ID:???
仮想化ソフトとUbuntuで配布してる仮想マシン入れればwindowsでlinux併用できるのに
なんでwindows版の開発環境使うんだろうか
0807nobodyさん2010/12/14(火) 20:33:06ID:???
Windowsでも開発することはあるけど…
仮想マシンにあるフォルダの共有機能使ってUbuntuで動かしてるわ
08088022010/12/14(火) 20:39:41ID:???
>>804 >>805

参考になりました。
私も相対パスを利用していきます。

ありがとうございました。
0809nobodyさん2010/12/14(火) 20:42:54ID:???
Windowsサーバーで運用してるシステムもたくさんあると思うが
0810nobodyさん2010/12/14(火) 20:43:58ID:???
>>802=>>808
DIRECTORY_SEPARATOR 使ってるよ
ただインクルードについては、include_pathに入れちゃうからパス指定はしてない。
0811サーバー”管理”2010/12/14(火) 20:46:08ID:???
あり過ぎて困っています。
0812nobodyさん2010/12/14(火) 20:49:58ID:???
>>809
>>802さんは「Linuxで動くシステム」と言っているので
それならローカル環境も、極力本番に近いLinuxにしたらという事を
>>806-807さんは言っているのだと思います。
0813nobodyさん2010/12/14(火) 20:53:37ID:???
丁寧で好感が持てる回答ですね
これを参考にして他の回答者はまともな文章を書きましょう
0814nobodyさん2010/12/14(火) 20:58:13ID:???
はい
0815nobodyさん2010/12/14(火) 21:13:35ID:???
どうみてもAjax厨の自演にしか見えないんだけどな
0816nobodyさん2010/12/15(水) 01:02:35ID:???
mysqlスレに質問するべきかもしれないのですが、
以下の命令を実行すると

$sql = " select log_id, name, mail_address from tokai_member ";
$sql.= " where log_id= '" . $_SESSION["log_id"] . "'";
$res = mysql_query( $sql );
$count = 0;
$info = mysql_fetch_array( $res ) ;

$info["log_id"] $info["name"] $info["mail_address"] にはデータが入るのですが

$sql = " select log_id, name, mail_address from tokai_member ";を
$sql = " select * from tokai_member "; に変えると $info["mail_address"] にだけ、
値が入らないのですが、何が間違えなのさっぱり分かりません。
データベースの方の設定で「*」の時は取得できない設定とかってあるのでしょうか。

環境はWinXp、xamppのmysqlを使っています。
よろしくお願いします。


0817nobodyさん2010/12/15(水) 01:05:46ID:???
>>1
0818nobodyさん2010/12/15(水) 01:15:10ID:V9crItGv
失礼しました。

【OS名】WindowsXP
【PHPのバージョン】5
【連携ソフトウェア】MySQL
【質問内容】
mysqlスレに質問するべきかもしれないのですが、
以下の命令を実行すると

$sql = " select log_id, name, mail_address from tokai_member ";
$sql.= " where log_id= '" . $_SESSION["log_id"] . "'";
$res = mysql_query( $sql );
$count = 0;
$info = mysql_fetch_array( $res ) ;

$info["log_id"] $info["name"] $info["mail_address"] にはデータが入るのですが

$sql = " select log_id, name, mail_address from tokai_member ";を
$sql = " select * from tokai_member "; に変えると $info["mail_address"] にだけ、
値が入らないのですが、何が間違えなのさっぱり分かりません。
データベースの方の設定で「*」の時は取得できない設定とかってあるのでしょうか。

0819nobodyさん2010/12/15(水) 01:17:58ID:???
>>818
それはない。何か見落としてるはず。
0820nobodyさん2010/12/15(水) 04:11:52ID:???
phpmyadminからの操作はどう?
0821nobodyさん2010/12/15(水) 07:48:29ID:???
mysql_fetch_assocで
0822nobodyさん2010/12/15(水) 08:47:47ID:24J/DfE6
質問です
PHPで皆がMySQLとかに自分の情報を書き込むサイトを作ってるのですが
この場合、PHPはアクセス制限かけた所に保存して、書き込みフォームで引き出すという方がいいでしょうか?
それともそのまま書き込みフォームにphpを記入してもいいのでしょうか?

安全面から見るとどっちの方がいいんでしょう?
0823nobodyさん2010/12/15(水) 09:07:07ID:???
>>822
要するに、public下にスクリプトを置くか、
public下ではhtmlレベルでrequire_onceかなんかでphpを呼び出すかってことかな?

どっちも一緒
08248182010/12/15(水) 09:22:44ID:V9crItGv
>>819-821さん、レスありがとうございます。

phpmyadminでの操作では、問題ありません。
phpmyadminのsql画面で同じsql文を実行すると、3項目出てきます。

mysql_fetch_assocというのは、知らなかったので
調べてやってみます。
0825nobodyさん2010/12/15(水) 09:23:21ID:24J/DfE6
>>823
すみません、publicって皆がアクセスできるところでしたっけ?
とりあえずCGIってcgi-binってフォルダがあってそこに入れる感じじゃないですか?そしてそのフォルダに属性でアクセス制限かけたり

だけどphpってHTMLにそのまま記入してますが大丈夫なんですか?っていう感じです、説明足りずスミマセン
自分はcgiみたいにアクセス制限かけた所に呼び出すphp保存して、phpでではrequire_onceやinclude_onceで呼び出した方が安全に思えるんですが
どっちも一緒なのですか
0826nobodyさん2010/12/15(水) 09:26:37ID:???
うん一緒
CGIが家で全裸露出するとしたら
PHPは透明人間になって駅前で全裸露出する感じ
0827nobodyさん2010/12/15(水) 09:28:23ID:???
require_onceとかはプログラムが複雑になったとき同じphpファイルを何回も書き込んで実行しないで
連用して使う感じだからそんな安全重視とかって感じではない
だからこそphpはセキュリティをしっかりやらなければならない
0828nobodyさん2010/12/15(水) 09:34:59ID:???
>>824
mail_addressが2つあるとかじゃないよな?
0829nobodyさん2010/12/15(水) 09:35:26ID:24J/DfE6
>>826
解りやすいたとえありがとうございます!
0830nobodyさん2010/12/15(水) 09:39:01ID:???
>>826>>827
何か違うよーな
0831nobodyさん2010/12/15(水) 09:48:59ID:???
処理は拡張子に依存しているからファイルの中身がHTML寄りであろうがCGI寄りであろうが
リスクは一緒。
0832nobodyさん2010/12/15(水) 09:53:44ID:???
おじちゃんたち、どおして働かないのぉ?.exe
0833nobodyさん2010/12/15(水) 10:00:38ID:???
ブラクラじゃねぇか
0834nobodyさん2010/12/15(水) 10:18:05ID:V9crItGv
>>828
レス、ありがとうございます。

mail_addressは1つしかありません。
phpmyadminでのsql実行や、「*」を使わずカラム指定した時は
正常に見えるので構造定義等は間違っていないと思いたいのですが。。。

他のカラムと違うのはmail_addressを主キーに指定しているくらいです。
0835nobodyさん2010/12/15(水) 10:48:14ID:???
それって単にSQLの最初の一行目のmail_addressが空なだけなんじゃねw
0836nobodyさん2010/12/15(水) 10:56:45ID:???
ORDER BY が無いと読み込む順序は不定。
フィールドを指定したときと*の場合で読む順序が変わってるだけかと。
確かめてみたらプライマリキーを指定したときはプライマリキーの順番、
*やプライマリキーを出力に指定してない場合はINSERTした順番のような感じだった。

なので、835に一票
0837nobodyさん2010/12/15(水) 11:06:51ID:???
キー定義されてないなら
警告でるし、そのときはNULLのはず。
DBでNULLならNULLだけど。
0838nobodyさん2010/12/15(水) 11:13:25ID:V9crItGv
>>835-836
レス、ありがとうございます。

>>それって単にSQLの最初の一行目のmail_addressが空なだけなんじゃねw
最初のレコードのmail_addressカラムにデータが入ってないと言うことでしょうか。
データ自体は入っています。(テスト中で3件しかないので)

836さんの言われてることは、mail_addressカラムに全部データが入っていれば
問題ないのですよね。

ただ、 >>プライマリキーを出力に指定してない場合 って言うのが、よく分かりません。
出力する、しないが指定できるのでしょうか?

ちょっと、ググって来ます。
0839nobodyさん2010/12/15(水) 11:15:03ID:???
>>837
ありがとうございます。
書いてる途中にレスが。。。。

警告みたいなものはでないです。
0840nobodyさん2010/12/15(水) 11:53:05ID:MdJi7P3P
【OS名】Ubuntu 10.10
【PHPのバージョン】5.3
【連携ソフトウェア】Apache, MySQL
【質問内容】

超ローカルcatv接続なのに規制されました(泣
phpを使って規制解除をしてもらう方法を教えてください
0841nobodyさん2010/12/15(水) 12:01:17ID:???
PHPとは関係ないので諦めて規制解除をお待ちください
0842nobodyさん2010/12/15(水) 12:54:05ID:???
PHPにこんな感じの匿名classはないんだっけ?
$class = new {var $m_name = "value"};

>>838
あとは凡ミスしか考えられない
色々と弄り回しているんだろうからデータも再確認した方がいいかも
0843nobodyさん2010/12/15(水) 12:56:54ID:???
>>1
0844nobodyさん2010/12/15(水) 13:12:58ID:???
>>818

> $info["mail_address"] にだけ値が入らない

どのようにして、「値が入らない」ことを確認していますか?
実は値が入っていても、「入っていない」と誤って認識してしまうプログラミングをしている可能性はありませんか?

0845nobodyさん2010/12/15(水) 13:20:44ID:???
if ( $info["mail_address"] = "" ) とかで代入しちゃってるとか
0846nobodyさん2010/12/15(水) 13:26:38ID:???
$infoをvar_dumpで出力して中身見ろ

>>842
一応あるといっていいのか謎な物はある
$class = new stdClass();
$class->m_name = "value";

こんな感じでプロパティを追加してく
メソッドも一応関数使って追加できたはず
0847nobodyさん2010/12/15(水) 14:55:36ID:V9crItGv
>>842,844-845
レス、ありがとうございます。

print($info["mail_address"]); とやって確認しています。
他のデータは表示されます。

ここまで来ると凡ミスだと思います。

問題の行の「*」を各カラム指定に変えると、正しく取得できるので
他の行でミスをしてるとは考えづらいのですが、多分、ほんの些細なこと
で引っかかってると思います。

もう一度、しっかりプログラムをチェックしてみます。
0848nobodyさん2010/12/15(水) 15:02:20ID:???
>>847

プログラムの見直しなどを行って、それでも本当に値が入っていないと判断できたならば、
$info["mail_address"] がどんな状態になっているかを調べませんか?

そして、調べた結果をこのスレに書いてもらえますか?

私個人の経験ではありえない状況であるので、是非にとも、一つの知識として得ておきたいと思いました。

厚かましいお願いで申し訳ありませんが、宜しくお願いします。
0849nobodyさん2010/12/15(水) 15:33:06ID:???
printじゃなくて var_dump で $info 丸ごと見たいところですよね。
0850nobodyさん2010/12/15(水) 17:03:42ID:???
>>847
可能ならDBのテーブル構造を示したほうが参考になるかも。
$info["mail_address"]だけが空というのは原因が想像できないので
フィールド名を変えてみたりして試したらどうですか。
"name"と"mail_address"のフィールド名を逆にしたらどうなりますか?
0851nobodyさん2010/12/15(水) 18:21:14ID:???
凡ミスに対しておまいら不思議なくらいいつまでも親切だな
0852nobodyさん2010/12/15(水) 18:25:26ID:???
>>851
あなたはこのスレに相応しくないようですのでお引取り願います
0853nobodyさん2010/12/15(水) 19:01:54ID:???
>>852
そうした言葉は荒れる原因になるので控えて頂けるよう願います
■ このスレッドは過去ログ倉庫に格納されています