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

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

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

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 97
http://hibari.2ch.net/test/read.cgi/php/1279833891/

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0503nobodyさん2010/09/29(水) 11:16:59ID:???
わからない事を答える事で自分も勉強になるじゃん
0504nobodyさん2010/09/29(水) 11:41:05ID:AW7qXGB4
【PHPのバージョン】5.2.14
【連携ソフトウェア】Apache、MySQL

PHPの設定がもともと magic_quotes_gpc=on; となっています。
自分でoffに変えることができますが、
前の担当者がonのままにしてstripslashesを多用しています。

今回offにする必要が出てきたのですが、影響はありますか?

onでもoffでも使えるように、よく下のような方法がとられるようですが、
そのような方法は組み込まれていないようです。
offにしてstripslashesを使うと問題が出るのでしょうか?

if (get_magic_quotes_gpc()){
  $text = stripslashes($text);
}

どうぞよろしくお願いします。
0505nobodyさん2010/09/29(水) 12:05:39ID:???
やってみればいいじゃない
テスト環境を作っておかないといろいろ困るぞ
0506nobodyさん2010/09/29(水) 15:30:30ID:lyrqwiNJ
>>504
http://jp2.php.net/manual/ja/function.stripslashes.php
バックスラッシュが取り除かれた文字列を返します(\' が ' になるなど)。 2 つ並んだバックスラッシュ (\\) は 1 つのバックスラッシュ (\) になります。

期待している文字列が変化する可能性があるので影響あろう

にしても質問範囲が広すぎて答えられないのが正解
0507nobodyさん2010/09/29(水) 17:25:48ID:???
>>502
あんたはバカげてると思うだろうけど、このレベルのことでつまづく人は
大抵何か些細なケアレスミスが原因だったりする。
バカげてると思うようなことでも一応やってみると原因がわかることもある。
0508nobodyさん2010/09/29(水) 17:30:54ID:???
>>504
まぁ、stripslashesを検索して全部削除するのが無難だろうな。
もしくは>>504のif文を含んだ関数を作ってstripslashesを置換するとか。
0509nobodyさん2010/09/29(水) 17:37:55ID:AW7qXGB4
>>505-506 >>508
アドバイスありがとうございます。
stripslashesが使われている箇所の数が多いですが、
地道に消そうと思います。
テスト環境も時間のあるときに作ろうと思います。

ありがとうございました!
0510nobodyさん2010/09/29(水) 18:51:24ID:ohuXeJ7T
log.php?ref=http://www.google.co.jp/&ua=ie
のようにパラメータにURLが入るとref.phpが403 Forbiddenになります。
ref=ttp://www.google.co.jp/ですと表示されます。
多分セキュリティ的な設定のせいと思うのですが
設定の名称教えていただけませんでしょうか。
0511nobodyさん2010/09/29(水) 18:55:41ID:???
エスパーさん出番ですよ
0512nobodyさん2010/09/29(水) 19:34:13ID:???
urlencodeしてみれ
0513nobodyさん2010/09/29(水) 19:36:07ID:???
>>510
&はURLの中では変数を切り分ける意味合いがある。

log.php?a=1&b=2

ってするとa=1,b=2を渡せるわけ。
で、URLに&が入ってると、こっちの意味とわけわかんなくなる。

ref = http://www.google.co.jp/&ua=ie
と渡したいんだったら、渡す値をURLエンコードして
渡した先のプログラムでデコードして使うのがセオリー。
0514nobodyさん2010/09/29(水) 19:52:06ID:ohuXeJ7T
ありがとうございます。
http://image.3-a.net/?re=http%3a%2f%2fwww.google.co.jp%2f
http://image.3-a.net/?re=ttp%3a%2f%2fwww.google.co.jp%2f
この様になります。

サーバのライブチャットで担当に言えば何とかなると思うのですが
何せ英語が全然でして。
cpanelのphp.ini QuickConfigなどで設定できないかと思い質問してみました。
0515nobodyさん2010/09/29(水) 20:17:49ID:ohuXeJ7T
あら・・perlでやっても同じでした。
もうhttp抜きでやろうと思います。
ありがとうございました。
0516nobodyさん2010/09/29(水) 20:28:16ID:???
サーバ側がリンクを出力し
クリックしたらサーバ側で処理をするようなものなら
エンコードデコードができてhttpが含まれない方法ででやればいいんじゃない?
base64_encode() base64_decode()あたり使うとか
0517nobodyさん2010/09/29(水) 20:45:31ID:ohuXeJ7T
>>516
base64でいけそうな感じです!
Google Analytics携帯版での作業だったのですが
うまくga.phpでデコードされてanalyticsに表示される事を祈ります。
ありがとございました!
0518nobodyさん2010/09/29(水) 21:10:34ID:NnO/2D7Z
よろしくお願いします。

【OS名】WinXP SP3
【PHPのバージョン】5.3.3
【連携ソフトウェア】Apache2.2
【質問内容】
上記環境に「ふたば(改)動画板」を導入したところ、
画像のアップロードや動画の投稿は問題ないのですが
サムネイルが生成されません。特にエラー等も表示されません。
以下の点は確認したのですが、他に解決に向けての
ヒントがあれば教えていただきたいです。

・スクリプト側で、サムネイルを生成する設定になっていること
 (生成しない設定も試してみたが同じ)
・スクリプト側で、サムネイルを保存するパスが間違っていないこと
・サムネイルを保存するフォルダ名が間違っていないこと
・サムネイルを保存するフォルダが読み取り専用になっていないこと
・php.iniにてphp_gd2.dllのコメントアウトが外されていること
・extension_dirが想定通りであること
0519nobodyさん2010/09/29(水) 21:40:17ID:???
ここで聞かないで本家で聞くべきだろ
ttp://gch.uni.cc/
0520nobodyさん2010/09/30(木) 00:13:37ID:???
ワロタwwwww
0521nobodyさん2010/09/30(木) 05:45:06ID:I9MDDWo9
MySQLのdateフィールドに

2010-09-01
2010-09-02
2010-09-03

というデータと

2010-07-00
2010-08-00

のようなデータ(年月のみ)が混在している場合、

前者をxxxx年yy月zz日、
後者をxxxx年yy月

というようにフォーマットしたいのですが、
効率の良いやり方はありますでしょうか?

よろしくお願いします。
0522nobodyさん2010/09/30(木) 05:57:07ID:???
>>521
http://jp2.php.net/manual/ja/ref.datetime.php
05235182010/09/30(木) 07:18:09ID:YkwDopQP
>>519
すみません、その本家で質問掲示板みたいなのが
見つからなかったのでここに書いたのですが…
0524nobodyさん2010/09/30(木) 08:10:07ID:???
特定のソフトウェアの話されてもわかるわけないじゃない
それとも君は僕たちにソースを読んで解決方法見つけろとおっしゃるわけ?
0525nobodyさん2010/09/30(木) 08:24:37ID:???
まあ言語問わずの考え方では、
  '-'で年月日を分けて、日がゼロだったら(以下略
だろうけど、きっと何でもあるPHPならもっと便利な関数があるに違いない。

俺は知らんけど。
0526nobodyさん2010/09/30(木) 10:08:03ID:???
>>523
substrとか使って右端2桁が'00'だったら後者とかするしかないんじゃない?
05275182010/09/30(木) 12:44:25ID:Jf2uMKoj
出先なのでID違うけど518です。

>>524
すみません。
スクリプトの名前を出したのは話を分かり易くする為のつもりでした。
勘ですがPHPの導入段階でミスを起こしている気がしていたのでここに書きました。
で、その勘は当たってたみたいでC:\Windowsにphp.iniを入れ忘れていたので
GD他ライブラリが読み込まれておらず、結果サムネイルが生成されてないっぽいです。

しかし、C:\Windowsにphp.iniを放り込むとスクリプトが上手く動作しなくなります。
スクリプトの拡張子をhtmlに変えたような、ソースが見える状態になってしまいます。
php.iniをC:\Windowsに入れなければ一応スクリプトは動きますので、
Apache側の設定は大丈夫だと思うのですがphp.iniの何処をチェックしたら良いでしょうか?
05285182010/09/30(木) 12:48:05ID:Jf2uMKoj
追記です。
使用しているphp.iniは同梱のphp.ini-developmentをベースに
ネット上の情報を参考にして書き換えたものですが、
php.ini-developmentをphp.iniにリネームして編集せずに
C:\Windowsに放り込んでも同じ現象が起きます。
0529nobodyさん2010/09/30(木) 12:50:54ID:???
>>528
ttp://hellosekaisan.blog97.fc2.com/
0530nobodyさん2010/09/30(木) 16:22:13ID:xlyY++2I
質問の内容が

今日作った料理は美味しくなかった
料理はイタリアンです。おいしくなるヒントを下さいレベル

エスパーしか答えられない
05315182010/09/30(木) 17:41:42ID:bBmLZhr9
>>530
すみません。他にどんな情報があれば良いのか分からないんです。
初心者用の質問スレは無いんでしょうか?
0532nobodyさん2010/09/30(木) 17:52:35ID:???
>>531
残念ながら、>>518の質問は、「下らねぇ質問」じゃないんだよ。
同じ状況を現場で解決する能力のある人はこのスレにいっぱいいるけど、
それを2chのスレでのやりとりで解決するにはたいへんな手間がかかる。
>>530の例えじゃないけど、絵の描き方を電話で聞いてるようなものだ。
0533nobodyさん2010/09/30(木) 17:58:19ID:???
サムネ作成部分のソースを見てみないとやっぱわからんでしょ
0534nobodyさん2010/09/30(木) 18:01:54ID:???
>>531
自分でつくったスクリプトじゃないと答える方も難しいかな

まずエラーがでないというのは、本当にエラーが無いからなのか
php.iniでエラーを抑制しているのか、スクリプトで@つけてるせいなのかわからない

gdについては、phpinfo()でGD Support が enabledになっているか確認して。
05355292010/09/30(木) 18:11:36ID:???
>>528
反応ないみたいけど
0536nobodyさん2010/09/30(木) 18:26:15ID:???
GD使った簡単なものを書いてみてそれが動作するかまずは確認すべきだ
05375272010/09/30(木) 19:26:25ID:YkwDopQP
>>532-536
ありがとうございます。質問を変えます。

php.iniを指定するとスクリプトがHTML扱いされて中身が見えます。
ttp://imepita.jp/20100930/694720
スクリーンショットをうpしてみましたがこんな感じになります。
php.iniがないと普通に動作しますが、GDが読み込まれてない(phpinfoで表示されてない)ので
使いたいスクリプトでサムネイルが生成されません。
pathで指定されてるところにphp.iniが無い場合、どこから設定を読んでるんでしょうか?
それをベースに設定を変えていけば動かせそうな気がするんですが…
>>529さんの貼ってくれたサイトに従ってphp.ini、httpd.confを設定してみましたが状況は同じです。
05385272010/09/30(木) 19:27:27ID:YkwDopQP
age忘れました。すみません。

あと
×スクリプトがHTML扱いされて中身が見えます。
○スクリプトがHTML扱いされたように中身が見えます。
です。
0539nobodyさん2010/09/30(木) 19:37:45ID:???
>>537
本当にやったのか?
httpd.confにaddhandlerでphpを登録したんだろうな?
0540nobodyさん2010/09/30(木) 19:39:32ID:???
Hello Worldすら出来ない状態じゃない?
05415272010/09/30(木) 20:04:52ID:YkwDopQP
うあああああああああ何だよこれえええええええええええ

落としてきたスクリプトの一行目が「<?」だけだったので
「<?php」にしたら動きました…
ググってみたらPHP5はデフォルトでショートタグがオフなんですね。
ていうかショートタグなんて今初めて知りました(´;ω;`)
散々スレ汚して本当にすみませんでした。
こんなアホに付き合ってくれた方に本当に感謝です。
ありがとうございました。

0542nobodyさん2010/09/30(木) 20:16:32ID:???
そんなスクリプト捨ててしまえ
0543nobodyさん2010/09/30(木) 20:30:29ID:???
定型分として書いてるから気がつかんな
捨ててしまえ
0544nobodyさん2010/09/30(木) 20:31:59ID:???
ショートタグ使ってるコードにまともなものはないから捨てて正解
0545nobodyさん2010/09/30(木) 21:16:21ID:xlyY++2I
うう デフォでショートタグだわw
あぁ おいらのコードは見られると穴だらけだなw
0546nobodyさん2010/10/01(金) 00:51:46ID:???
>>541
そのスクリプト一番最後に全部?>はいってるだろ
0547nobodyさん2010/10/01(金) 00:55:26ID:???
なんつうオチだ
0548nobodyさん2010/10/01(金) 01:22:52ID:???
俺は ?> 書かないな
0549nobodyさん2010/10/01(金) 01:23:42ID:???
ダメなコード(自分主観)は…
・ショートタグ
・文字コードがShift-JIS
・extract
・タグを閉じたり開いたり忙しい
・echo "{$var}";
・ファイルの先頭・要所にコメントがない、
 あってもコード見たら分かる事しか書いてない(仕様を書かないと意味がない)
・1行がやたらと長い
・$_GETとか$_POST配列扱う時にisset使わず分岐したりしてる(警告出るちゅーねん!)

…書き出したらきりがないのでこのあたりにしておく
0550nobodyさん2010/10/01(金) 01:37:35ID:???
>>549
$_GETや$_POSTのチェックって
!emptyよりissetがいいの?
0551nobodyさん2010/10/01(金) 01:44:11ID:???
emptyでもis_nullでもなんでもよか
0552nobodyさん2010/10/01(金) 01:48:55ID:???
>>550
基本的に、関数(もしくは言語構造)の本来の意味を考えて使い分けてる、
”あるかどうか”を調べたいのならisset
”無いかどうか”を調べたいのならempty

$_GETとかで使うのはほぼ前者
0553nobodyさん2010/10/01(金) 01:53:57ID:???
あと、issetを自分がよく使うのは
isset($_GET['name'], $_GET['email'], $_GET['body']);のように複数渡せるからというのもある
0554nobodyさん2010/10/01(金) 01:54:18ID:JW8iU96H
・$_GETとか$_POST配列扱う時にisset使わず分岐したりしてる(警告出るちゅーねん!)

これって
$hoge = $_GET['hoge'];
がだめっていってるんだよね?

$hoge = null;
if (isset($_GET['hoge'])) {
$hoge = $_GET['hoge'];
}

にしろってことだよね?

もしいっぱいあった場合ってすべての$_GET $_POSTに対してこの処理をするの?
10個ぐらいあるとだいぶ間抜けに見えそうなんだけど
なんかいい記述方法あるかな?
0555nobodyさん2010/10/01(金) 01:56:53ID:???
>>550
判断基準が全然違うので目的にあったものを使う
どちらも未定儀の変数に対する挙動は null の場合と同じ

is_null()
> var が null の場合に TRUE、 それ以外の場合に FALSE を返します。

empty()
> varが空でないか、0でない値であれば FALSE を返します。
>
> 次のような値は空であると考えられます。:
>
> * "" (空文字列)
> * 0 (0 は整数)
> * "0" (0は文字列)
> * NULL
> * FALSE
> * array() (空の配列)
> * var $var;(変数が宣言されているが、クラスの中で値が設定されていない)
0556nobodyさん2010/10/01(金) 02:00:23ID:???
>>554
なんとissetは引数の数が可変、一気に処理できる
0557nobodyさん2010/10/01(金) 02:06:44ID:JW8iU96H
そらー知らなかったわー
あとでよくマヌアルみてみる
ありがとう
0558nobodyさん2010/10/01(金) 07:01:53ID:???
array_key_existsばっか使ってるわ俺
0559nobodyさん2010/10/01(金) 10:06:47ID:Jbi45SFJ
function foo($bar){
$bar = preg_replace("/あ/","い",$bar);
}
$a = "あいうえお";
foo($a);
echo $a;

と書いたんですが、

あいうえお

と出力されてしまいます。

いいうえおに変換されるようにするにはどこが間違ってますでしょうか
0560nobodyさん2010/10/01(金) 10:13:14ID:???
>>559
それだと$aの中身が変わってないから
echo $a しても「あいうえお」のまま。
0561nobodyさん2010/10/01(金) 10:15:34ID:???
>>559
function foo(&bar) {
0562nobodyさん2010/10/01(金) 10:19:36ID:???
- function foo($bar){
+ function foo(&$bar){
0563nobodyさん2010/10/01(金) 10:21:33ID:???
>>560-562
ありがとうございました
&がいるんですね
しっかり見落とさないようにします
0564nobodyさん2010/10/01(金) 10:22:30ID:???
$が抜けてた恥ずかしい…
0565nobodyさん2010/10/01(金) 10:28:19ID:???
文字コードがUTF-8のときは、
preg_replace("/あ/u","い",$bar);
ってしないとうまく動かないかも。
0566nobodyさん2010/10/01(金) 11:01:18ID:???
>>559
だからそんな単調な置換にpreg_replaceを使うなと何度(ry
0567nobodyさん2010/10/01(金) 11:33:39ID:???
あいうえお を いいうえおにすることに対してそんなに突っ込まなくていいよ
0568nobodyさん2010/10/01(金) 11:35:37ID:???
初心者にヘタくそなコード教えるなよ・・・正規表現使うところか?
0569nobodyさん2010/10/01(金) 11:35:40ID:???
例題にマジになってる男の人って・・・
0570nobodyさん2010/10/01(金) 11:43:12ID:???
function foo($bar){
return 'いいうえお';
}
$a = 'あいうえお';
echo foo($a);
0571nobodyさん2010/10/01(金) 14:30:05ID:???
$_GETや$_POSTをチェックする意味って何?
0572nobodyさん2010/10/01(金) 14:39:42ID:???
postはそうそうないけどgetはパラメータいじれるだろ
0573nobodyさん2010/10/01(金) 14:40:08ID:???
>>572
お前に聞いてない
0574nobodyさん2010/10/01(金) 15:01:22ID:???
>そうそうない
その程度の認識だからPHPがゴミ扱いされるんだよ
0575nobodyさん2010/10/01(金) 15:07:51ID:???
>>572
そうじゃなくて、>>549-554の言うようにisset等でチェックする意味あるの?
$var=$_GET["var"] 等とした後に$varの内容を目的に応じてチェックするんじゃ
だめなの?
0576nobodyさん2010/10/01(金) 15:26:09ID:???
そこらへんまとめてクラスとymlでする俺には関係ない話だった
0577nobodyさん2010/10/01(金) 15:36:01ID:???
>>575
チェックしないと警告でるじゃん
てか、あらゆる入力(入力なしの場合も含む)を想定して
プログラムしないと、後々バグのすくつになる
0578nobodyさん2010/10/01(金) 16:02:36ID:???
自分の場合、
error_reporting(E_ALL | E_STRICT);
を設定して、あらゆる操作で一切の警告が出ないことが前提条件
0579nobodyさん2010/10/01(金) 16:12:42ID:???
>>577
$_GET["var"]が存在しないとき、
$var=$_GET["var"]
とすると警告出る?記憶にないんだが。
0580nobodyさん2010/10/01(金) 16:13:50ID:???
一つ前のレスにあるだろ
設定次第
0581nobodyさん2010/10/01(金) 16:16:28ID:???
$_GET['var']が存在しない場合もあるでしょ
その場合代入できるわけないでしょ
0582nobodyさん2010/10/01(金) 16:17:15ID:???
>>578
バージョン5.3使ってますって書いておけ
0583nobodyさん2010/10/01(金) 16:30:59ID:???
E_STRICTはphp5からだし
E_ALLはphp4にもある

それに$var=$_GET["var"]これでエラーが出る設定は
E_NOTICEを出力する場合だからE_ALLだけで十分
5.3とか関係ないな
0584nobodyさん2010/10/01(金) 16:39:55ID:???
$var=$_GET["var"]でエラーとなる件
これって、つまり$_GET["var"]が存在しないのに評価しようとしてWarningが出るってこと?
配列だからエラーになるの?
$var=$a($aは未定義)の場合もエラーになるの?
0585nobodyさん2010/10/01(金) 16:48:29ID:???
Notice: Undefined variable
0586nobodyさん2010/10/01(金) 17:56:49ID:???
>>584
先頭に
error_reporting(E_ALL);
つけてやればわかるだろ
まぁ予想通りの結果>>585になるが
0587nobodyさん2010/10/01(金) 18:08:33ID:???
>>586
PHP5.2じゃでねえよ
ちゃんとPHP5.3の環境で出ますって書け
0588nobodyさん2010/10/01(金) 18:10:31ID:???
一人痛い人が居るようですね
0589nobodyさん2010/10/01(金) 18:28:01ID:???
バージョン関係ないし
0590nobodyさん2010/10/01(金) 19:04:14ID:/wsXjKAq
一番厳格にするには error_reportingにE_ALL | E_STRICT | E_NOTICEと設定する事ですか?
0591nobodyさん2010/10/01(金) 19:17:48ID:???
>>590
E_ALL: サポートされる全てのエラーと警告。 E_STRICT レベルのエラーは除く。
0592nobodyさん2010/10/01(金) 19:40:37ID:???
>>566
単調な場合に最適なのを教えていただけないでしょうか
0593nobodyさん2010/10/01(金) 19:44:38ID:???
str_replace
0594nobodyさん2010/10/01(金) 19:48:17ID:???
ちょっと前にスレでも同じ質問でpreg_replaceの話題が出てたのにね
釣りとしか思えない
0595nobodyさん2010/10/01(金) 20:06:07ID:???
>>594
>>141のこと?
0596nobodyさん2010/10/01(金) 20:07:38ID:???
>>593
ありがとうございます
正規置換とで使い分けたらいいのかな?
0597nobodyさん2010/10/01(金) 20:10:43ID:???
>>592
過去ログを10回見ろ
0598nobodyさん2010/10/01(金) 20:17:46ID:???
過去ログを10回見るより>>593を一回見た方がよくね?
>>593は単純なprintもwhileで10回まわして表示するタイプ
0599nobodyさん2010/10/01(金) 20:21:01ID:???
>>593じゃなくて>>597だろ
0600nobodyさん2010/10/01(金) 21:19:30ID:???
単純な置換ならstr_replace、strposがいいって出てますよ
>>599
スレに張り付きすぎ少しゆとりを持て
0601nobodyさん2010/10/01(金) 21:21:30ID:???
例文が単純な置き換えだから単純な置き換えの質問にちまいない
ってどんだけ単純な頭なんだよ
0602nobodyさん2010/10/01(金) 21:55:01ID:???
顧客が説明した要件 : 関数に渡した変数をpreg_replace()っても呼び出し元は変わんない!不思議!
プロジェクトリーダーの理解 : Unicode修飾子が怪しくね?
アナリストのデザイン : 正規表現使うなカス
プログラマのコード : function foo($bar) { return 'いいうえお'; }
得られたサポート : 過去ログ10回読め

顧客が本当に必要だったもの : 参照渡し
■ このスレッドは過去ログ倉庫に格納されています