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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2011/07/02(土) 18:37:53.12ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0892nobodyさん2011/07/25(月) 01:43:42.96ID:???
>>890
好きだから
0893nobodyさん2011/07/25(月) 11:53:52.98ID:???
ああ
0894nobodyさん2011/07/25(月) 22:41:11.66ID:???
いや
0895nobodyさん2011/07/25(月) 22:53:24.87ID:???
やめて
0896nobodyさん2011/07/25(月) 23:05:18.55ID:???
素直になれよ
0897nobodyさん2011/07/26(火) 00:29:11.01ID:???
きて
0898nobodyさん2011/07/26(火) 01:13:43.10ID:???
もっと
0899nobodyさん2011/07/26(火) 03:47:36.36ID:82tebuFo
function hoge($a = $b) {
}
これは$bが定義されていようがいまいがParse errorが出ますが、

function hoge($a = B) {
}
と定数を指定した場合は、定数が存在しなくてもエラーになりません。
呼び出した場合はさすがにUse of undefined constant B - assumed
とNoticeレベルのエラーが出るようです。

このhoge関数が書いてる場所とは別のファイルにBを定義していて、
両方のファイルをincludeしないとhoge()という形では呼び出せません。

includeしないと存在しないBを関数の引数や関数の中身で使うのはよくないことでしょうか?
hoge関数を書いてるファイルにBをデフォルトとして定義して、
他のファイルで上書きしたりしようと試みましたが、定数はunsetのようなことも書き換えることもできません。
0900nobodyさん2011/07/26(火) 03:49:59.30ID:???
>>899
if(defined('B')){
function hoge($a = B) {
}
}
でok
09018992011/07/26(火) 03:52:00.04ID:82tebuFo
>>900
即レスありがとうございます。

なるほど、ifの中にfunctionを書くという発想はありませんでした。
早速そのように書き直したいと思います。
どうもありがとうございます。
0902nobodyさん2011/07/26(火) 03:57:53.19ID:???
両方includeすることを前提にしてるなら別にそのままでいいんじゃないか?
>>900は定石だと思うけどBを定義してない状態でhogeを呼ぶと
関数自体が存在しないからどのみちエラー出るよ
0903nobodyさん2011/07/26(火) 03:59:45.68ID:???
そりゃ定数関係なく当たり前じゃん?
0904nobodyさん2011/07/26(火) 04:43:47.16ID:???
if(!defined('B')){
echo "あ?";
exit();
}

これいれとけばいいじゃん
0905nobodyさん2011/07/26(火) 06:40:07.42ID:???
全部に制御構造挟むのはパフォーマンスも低下するし何より大変
ファイルの存在や外部から受け取った変数はちゃんとチェックするにしても
自分で使う内部のものにはやらんな
あえて>>900のようにする意味はちょっと自分にはわからんな
0906nobodyさん2011/07/26(火) 07:55:38.94ID:???
大変だからやらないってどんだけ低レベルだ
0907nobodyさん2011/07/26(火) 08:23:42.95ID:???
レベルの問題じゃないだろzk
0908nobodyさん2011/07/26(火) 10:13:35.30ID:???
>>906
それ、コンピュータ自体否定してるぞw
0909nobodyさん2011/07/26(火) 10:51:48.11ID:???
PDO使う前提で開発してて
if (class_exists('PDO'))
なんて処理しないだろ普通
0910nobodyさん2011/07/26(火) 13:42:39.49ID:???
1回成功すれば、その後環境かわらなければ
永久に成功するものを毎回チェックするのか
0911nobodyさん2011/07/26(火) 15:20:14.60ID:???
この際PDOは関係ないだろバカ
0912nobodyさん2011/07/26(火) 17:09:00.00ID:zVu+sgBb
はしご高をeuc-jpからutf-8に変換する事は出来たのですが、
その逆のutf-8からeuc-jpに戻す場合はmb_convert_variablesではできないんでしょうか?
0913nobodyさん2011/07/26(火) 17:18:21.26ID:???
やってみれば?
0914nobodyさん2011/07/26(火) 17:23:40.52ID:zVu+sgBb
すいません、当然色々と試してはいます
utf8 > euc-jp
utf8 > eucjp-win
utf8 > sjis-win > euc-jp
utf8 > sjis-win > eucjp-win
と全て駄目でした
0915nobodyさん2011/07/26(火) 17:23:47.89ID:???
mb_convert_encodingではどうなの?
0916nobodyさん2011/07/26(火) 17:24:59.12ID:???
あと具体的にどうダメだったの?
出力したコードを16進にして表示させるとどうなるの?
0917nobodyさん2011/07/26(火) 17:27:01.28ID:???
やってみれば?
0918nobodyさん2011/07/26(火) 17:38:09.28ID:???
>>915
変化ありませんでした

>>916
$var = '��';
$var = mb_convert_encoding($var, 'sjis-win', 'UTF-8');
$var = mb_convert_encoding($var, 'eucjp-win', 'sjis-win');
echo($var);
echo(bin2hex($var));
上記のように変換、出力してチェックしてますが、
eucjp-winで最後に変換するとロというか□というかそんな感じの文字が出力され、
bin2hexの値は8ff4fbでした

euc-jpで最後に変換すると?が出力され、
bin2hexの値は3fでした
09199182011/07/26(火) 17:38:50.56ID:zVu+sgBb
すいません、sageチェックはずし忘れました
0920nobodyさん2011/07/26(火) 17:49:02.60ID:???
8ff4fbはIBM拡張文字のはしご高
変換自体はできてるけど、こっちのコードだと表示できないんだね
0921nobodyさん2011/07/26(火) 18:14:27.81ID:zVu+sgBb
>>920
自分が表示させたいコードが何かを調べた結果、
CP51932で変換すればよさげだと言う所にたどり着けました
euc-jp > utf-8に変更する際も回りくどい変換をせずに一発でいけるようになりました
ありがとうございます、非常に助かりました
0922nobodyさん2011/07/26(火) 19:43:44.08ID:???
>>911
お前がバカだわ
問題の本質がわかってないw
0923nobodyさん2011/07/26(火) 19:53:35.25ID:???
分かってるからご丁寧に釣られんな
0924nobodyさん2011/07/26(火) 23:15:23.90ID:aqwngZ8v
こちらのサイトのアップローダーを導入し、ファイルサイズ制限にひっかかりました。
http://d.hatena.ne.jp/aki202/20090415/1239774798

書いてある通り.htaccessを作成し、中身が「php_value upload_max_filesize 10M」
だけにして配置したのですが、アップローダーがPort 80エラーを起こしてしまいます。
.htaccessを削除したり、中身を空にするとエラーが発生しなくなるため、
.htaccessの記述に原因があると思われますが、調べてもこのような回答が出てきたりして、何が問題かわかりません。
http://questionbox.jp.msn.com/qa4580341.html

何処を修正すれば良いのでしょうか。
0925nobodyさん2011/07/26(火) 23:24:33.75ID:???
>>924
http://mypacecreator.net/blog/archives/508
0926nobodyさん2011/07/26(火) 23:38:22.33ID:aqwngZ8v
ダメですね。
.htaccessに書く場合をそのままコピペして
UTF-8BOMなしにもしましたが、やはりエラーが出てしまいます。
0927nobodyさん2011/07/26(火) 23:41:42.80ID:???
そのままコピペしたら左に行番号付くぞ
0928nobodyさん2011/07/26(火) 23:43:19.36ID:???
php_valueが使えない鯖なんじゃねーの
0929nobodyさん2011/07/27(水) 03:21:30.86ID:???
PHPスレなんだから鯖のせいにしないでPHPで解決してやれよ
0930nobodyさん2011/07/27(水) 04:03:28.75ID:TDLpYBaY
print_rでは false は空欄ですか?
0931nobodyさん2011/07/27(水) 06:03:53.51ID:???
やってみれば?
0932nobodyさん2011/07/27(水) 06:12:38.05ID:???
コード間違うと怖いので教えてください
0933nobodyさん2011/07/27(水) 07:18:49.61ID:???
print_rでfalseを出力するのにどうコード間違えるんだよw
むしろ間違えるならそれ以前の問題だわw
0934nobodyさん2011/07/27(水) 08:14:28.82ID:???
>>929
わかってるあなたが書きなよ
0935nobodyさん2011/07/27(水) 11:01:37.74ID:???
.htaccess 改行コード とか?
0936nobodyさん2011/07/27(水) 11:47:30.24ID:???
>>934
いや、俺はわかってないから
0937nobodyさん2011/07/27(水) 11:48:54.70ID:???
>>934
htaccessの改行コードが違うとどうなるんだよw
想像で適当なこと言ってんじゃねぇよ
0938nobodyさん2011/07/27(水) 11:55:41.95ID:???
俺はわかってるぜ
0939nobodyさん2011/07/27(水) 13:49:52.01ID:???
ってやつに限って、解ってる。
0940nobodyさん2011/07/27(水) 14:05:55.91ID:???
まーまずは、.htaccessで他のディレクティブが使えるかチェックしてみ
php関連以外ね。AllowOverrideはどうなってる?
0941nobodyさん2011/07/27(水) 15:12:23.02ID:q19iSiUx
「mb_send_mail関数はsendmeilを経由してメール送信します。
mb_send_mail関数ではSMTP認証の操作ができない。」
って2010年に発売したPHPの本に紹介が載ってた。
しかし、SMTP認証がないサーバーなんてネット黎明期しかないだろ
バカじゃにのこの本の作者?
mb_send_mail関数を使った方法でメール送信不可能ってことは
どうやってphpでメール送るのですか?
SMPT認証するプログラム教えてください。
0942nobodyさん2011/07/27(水) 15:14:59.40ID:???
echo('サドマゾパーティしてもいいよ');
0943nobodyさん2011/07/27(水) 15:20:27.20ID:???
>>941
localhostから送るのに認証必須な鯖は最近でもなかなかないぞ?
0944nobodyさん2011/07/27(水) 15:24:46.09ID:???
>>941
あと基本的に認証が必要なのは、外からアクセスして外へ送る場合だけ
ほんとにPHPからSMTP AUTHが必要なのか、から考えたほうがいい
自分でメールサーバたてなくて、かつ上位(プロバイダとか)の
メールサーバ経由が必須で、そのphpのサーバからそこに送るのに
認証が必要、な状況ならば必要にはなるね。それ用のモジュール持ってくればいいだけだけど
0945nobodyさん2011/07/27(水) 15:31:03.24ID:q19iSiUx
本の載ってたプログラムで
localhostからヤフーのメールでgooメールに送信しようとすると
530で通信に失敗してるみたいです。
localhostからヤフーのメールでgooメールに送信って難しいのですか?
0946nobodyさん2011/07/27(水) 15:33:47.82ID:???
自分は何一つ理解出来てないのに著者を馬鹿にするとかなかなか面白い奴だな
0947nobodyさん2011/07/27(水) 15:37:25.73ID:???
localhostからって事は、自前でメール鯖たててんの?
それでヤフーのサーバ使う理由がわからんけど
もしそうしたいなら、localhostのサーバの設定で
SMTPAUTHでヤフーのサーバにrelayする設定いれとけば
phpからはlocalhostに送るだけだよ。
もし直接ヤフーのサーバ使うつもりなら、PEARからメール関係
持ってくればいい。
0948nobodyさん2011/07/27(水) 15:39:38.09ID:q19iSiUx
>>946
一般的なフリーメールのYahoo!とgooとGoogleのメール
でlocalhostから送信できないって全然初心者向け
プログラムじゃないじゃねーかって言いたかった。
0949nobodyさん2011/07/27(水) 15:43:09.19ID:???
localhostの意味理解してレスしてるかどうかも怪しい
お前が馬鹿だって事は皆理解してるから下手に取り繕ってレスすんな
0950nobodyさん2011/07/27(水) 15:48:26.73ID:q19iSiUx
>>947
phpの本に載ってたxamppのApache使ってlocalhostで
phpを動かしてます。
0951nobodyさん2011/07/27(水) 15:49:05.56ID:???
localhostってファミレスだろ?
0952nobodyさん2011/07/27(水) 15:53:56.91ID:???
意味わからずに乱用されるとどのレベルを想定して答えりゃいいか
わからなくなるなw
0953nobodyさん2011/07/27(水) 15:55:27.23ID:???
>>948
php等のwebプログラムから、そのフリーメールのSMTP鯖を
使って送信する方が特殊なケースだよ。
0954nobodyさん2011/07/27(水) 15:56:34.88ID:???
>>952
ほんとそうなんだよな
馬鹿にされたくない新人とかプライドだけの能無しに多いわこういう奴
0955nobodyさん2011/07/27(水) 15:57:35.14ID:q19iSiUx
>>952
phpのプログラムの勉強を始めて5日です
0956nobodyさん2011/07/27(水) 16:02:36.15ID:???
ZendなりPEARなり使えばいいんじゃないの
0957nobodyさん2011/07/27(水) 16:02:47.82ID:???
>>955
環境は?
まあググっただけであまり読んでないけど
http://www.phpbook.jp/pear/pear_mail/
この辺試してみては?
0958nobodyさん2011/07/27(水) 17:51:29.59ID:???
>>951
ロイヤルホストやがな!
0959nobodyさん2011/07/27(水) 18:00:35.79ID:???
もう夏休みか。
0960nobodyさん2011/07/27(水) 18:03:40.59ID:???
1年中夏休みだろ
0961nobodyさん2011/07/27(水) 18:32:55.60ID:q19iSiUx
>>957
やってみます。
0962nobodyさん2011/07/27(水) 18:43:21.35ID:???
phpからmsqlのデータベースにアクセスして、一覧の取得をテーブルに出力するコードを書いたんですが、
mysqlの結果がひし形に?マークみたいに文字化けしてしまいます…
一応文字コード調べたらshift-jisになってました
phpファイルはUTF-8、mysqlはutf8_general_ciでUTF8に統一してるのになぜshift_jisになってしまうんでしょうか
0963nobodyさん2011/07/27(水) 18:48:19.13ID:???
>>962
http://php.net/manual/ja/mysqli.set-charset.php
0964nobodyさん2011/07/27(水) 19:03:47.68ID:???
test
0965nobodyさん2011/07/27(水) 19:55:13.97ID:rFjGz8Xs
htmlspecialcharsは外部から受け取った値のみでよいのでしょうか?

$list=array('a','b','c','d','e');
foreach($list as $value){
echo htmlspecialchars($value);
}

今は全部こんな風にechoするところにはhtmlspecialcharsを入れています。
ループでまわすような内部の変数を全部通してたら相当パフォーマンスも下がるので、
こういう場合はどうしたらいいのでしょうか?
0966nobodyさん2011/07/27(水) 20:01:45.51ID:???
>htmlspecialcharsは外部から受け取った値のみでよいのでしょうか?
意味が分からない。

>ループでまわすような内部の変数を全部通してたら相当パフォーマンスも下がるので、
まともにプログラムを組めるようになってから心配した方がいい

っつか、ほんとうにそれだけならまとめてhtmlspecialcharsしても変わらんのじゃね?
echo htmlspecialchars(implode('', $list));
0967nobodyさん2011/07/27(水) 20:07:19.31ID:???
>>965
受け取った値はそのまま使って、DBなりブラウザに出力する際に処理するのが普通
個人的には出力直前まで処理したくないから先に変換掛けるのは好きじゃないけど
http://zapanet.info/blog/item/1193
この辺が参考になるんじゃないかね
ぶっちゃけ10万回程度使ってもそんなに重くならんから気にするな
サーバの負荷よりもブラウザの負荷のがやべえ
09689652011/07/27(水) 20:44:16.86ID:rFjGz8Xs
レスありがとうございます。
質問内容は単純に、
$name="山田太郎";
echo "こんにちは{$name}さん";
この時$nameに対してhtmlspecialcharsをするべきかという話です。

元々外部から受け取ってDBにいれておいたデータでも、
$_GETや$_POSTで受け取ったものではありません。

$a = array(1,2,3,4,5,6,7,8,9);
$b = 3; //DBからとってきたような値です
<?php foreach($a as $v):?>
<option value="<?=$v>" <?php if($v==$b):?>selected<?php endif;?>><?=$v></option>
<?php endforeach;?>
この時に$vに対して使うかどうか迷っています。
0969nobodyさん2011/07/27(水) 20:51:17.65ID:???
すべき
何でもかんでも最適化するのが良い訳じゃないよ
0970nobodyさん2011/07/27(水) 21:06:59.13ID:???
>>968
何のために使う関数か考えればおのずと分かる
使うべきか使わないべきか聞いている時点で、そもそもWebアプリのセキュリティの知識が欠けてる
09719682011/07/27(水) 21:15:20.39ID:rFjGz8Xs
>>969
ありがとうございます。
そうですね、他のセキュリティに無縁な場所の、
ループや条件文などの構造み直しで最適化を図りたいと思います。

>>970
xss対策のための関数ですよね。
ただ上記のような例では挿入する隙がないので起き得ないと思います。
>使うべきか使わないべきか聞いている時点で、そもそもWebアプリのセキュリティの知識が欠けてる
欠けてるから聞いたんですよ。
0972nobodyさん2011/07/27(水) 21:23:04.41ID:???
セキュリティ云々よりもヒューマンエラーの問題だけどな
今は大丈夫でも今後の修正でミスが絶対に発生しないとは限らない
0973nobodyさん2011/07/27(水) 21:56:16.53ID:???
>>968のような処理自体が重いよね
セレクトボックスの仕様どうにかならんもんかのう
09749242011/07/27(水) 22:10:33.15ID:RXEWzwMM
どうにもコードは間違っていないようなのでサーバーに問い合わせて以下の回答を得ました。

.htaccessでphp_value や PHP_Flag は使えない。php.iniを使え。
ただし、php.iniの記述については一切答えない。
また、memory_limitの値は変えられるがこっちで上限が決めてある。上限は教えられない。

と、いった所です。
ですのでhttp://mypacecreator.net/blog/archives/508を参考にphp.iniのコードを張りつけました。
とりあえず、エラーは出なくなったのですが、アップロードすると上限が変わっていない所か
3MB程度のファイルもアップロードできなくなりました。(数kbyteなら出来る)
php.iniを削除すると3MBのファイルがアップロードできるようになるため、php.iniで3MBのファイルを弾く様な記述をしたと思ったのですが、
やはり、参考にしたサイトのままであり、memory_limitに引っ掻かているとも思えず訳が分かりません。

なにかおかしそうな所、サーバーに問い合わせるべき場所などは無いでしょうか。
0975nobodyさん2011/07/27(水) 22:31:28.77ID:???
<?php phpinfo() ?>とかで設定がちゃんと反映されてるか確認。
エラーログ全開にしてエラーが出てないかも確認。
いちおうPHPでプログラムを書く人のための板なんでそのへんよろしく。
09769242011/07/27(水) 22:55:35.67ID:RXEWzwMM
駄目ですね
サーバー側のコントロールパネルの機能でphp.iniの記述と作成をして、
同階層に<?php phpinfo() ?>だけ書いたファイルを確認しましたが、設定自体が変わっていないようです。
改行コードが悪さしてるかと思い、memory_limit 200Mの一行だけ書いてみましたが、これも駄目
どうやらサーバーに問い合わせた方がよさそうですね。
ありがとうございました。
0977nobodyさん2011/07/27(水) 22:58:28.60ID:???
出来ないのは何故か位考えようとしろよ
つーかエラーログを出せ
09789242011/07/27(水) 23:27:39.68ID:RXEWzwMM
そうですね。考えたが甘かったようです。
調べたところなんとか原因が分かりました。
まず、こちらのサイトのコードですがhttp://mypacecreator.net/blog/archives/508
これをそのままコピペすると改行が無視されて

;メモリ使用量の制限 memory_limit 20M
こんな感じになってしまいます。
そのため、このコードをコピペしただけではうまく行きませんでした。
次に改行コードを修正し、直接php.iniファイルを上書きしのですが、それでも設定に反映されていませんでした。
これはコントロールパネルからphp.iniの編集を行わないとapacheが再起動されないからのようです。

というわけで、改行コードに気を付けてコントロールパネルから記述すると上手く行きました。
ちなみにサーバーはさくらです。
本当にありがとうございました。
0979nobodyさん2011/07/28(木) 00:00:22.51ID:???
そもそも「サーバーに問い合わせる」という言葉の使い方がおかしい
0980nobodyさん2011/07/28(木) 00:04:36.10ID:???
イチャモン回答者が今日はいついてるようだな
ここのところ雰囲気が改善されてたんだが残念
0981nobodyさん2011/07/28(木) 00:05:11.17ID:???
ええっ
0982nobodyさん2011/07/28(木) 00:08:29.97ID:???
「サーバーに問い合わせる」んじゃなくて「サーバー会社に問い合わせる」だな。
さもないとクライアントアプリからサーバーに何か問い合わせしてるのかと勘違いする。
0983nobodyさん2011/07/28(木) 00:17:00.54ID:???
まぁ意味を汲み取れないやつはいないだろう
流れ的にSQLの話してるなんて到底思えないし
0984nobodyさん2011/07/28(木) 00:19:57.98ID:???
前日に散々言われてるのに無駄に専門用語使って、
しかも間違ってるから突っ込まれてるだけだろ
0985nobodyさん2011/07/28(木) 02:08:15.37ID:???
専門用語・・・?
0986nobodyさん2011/07/28(木) 02:44:58.96ID:???
>>983
「サーバーに問い合わせる」のが「SQL」っておかしくないか?
HTTPでもPOPでもクライアントからサーバーへ情報を確認する手順のことを
一般的に「問い合わせ」っていうんだよ
0987nobodyさん2011/07/28(木) 03:34:00.71ID:???
http://www.php-ref.com/basic/04_is_empty.html
毎回これでエラーがでるわ
まったくヽ(`Д´)ノプンプン
0988nobodyさん2011/07/28(木) 03:36:58.49ID:???
is_empty関数なんてねぇよw
0989nobodyさん2011/07/28(木) 03:43:05.66ID:g5Xs46CY
preg_grepの逆ってできませんか?
配列の値で文字列を検索したいのですが
0990nobodyさん2011/07/28(木) 04:27:56.97ID:???
>>989
forでループすれば?
0991nobodyさん2011/07/28(木) 04:33:50.15ID:???
>>986
リクエストは要求です
0992nobodyさん2011/07/28(木) 04:35:08.20ID:???
>>989
「逆」の意味がわからん
preg_grepはヒットした要素の配列を返す関数だが、
それの逆ってことは、配列にパターンが複数入っていて、
ヒットしたパターンの配列を取得したいってことか?
レス数が950を超えています。1000を超えると書き込みができなくなります。