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

【PHP】下らねぇ質問はここに書き込みやがれ 56

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/10/11(木) 17:55:41ID:uObe69hr
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 55
http://pc11.2ch.net/test/read.cgi/php/1191058556/

◆質問する時の注意
・ sage進行(メール欄にsageと記入すること)「sage進行」とはスレを目立つ上部に上げないことによって、荒らしが発見できないようにすることです
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・ 書き込むときには、「公式マニュアル、リファレンス本は読みました」と明記すること
(でないと、公式マニュアル読めと煽られます)

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

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
・質問者が「公式マニュアル読んだ」と書いていないからといって、
公式マニュアルに書いてもいないのに、公式マニュアルよめと適当なことを言わないこと。
質問者は公式マニュアルを読んでいるかもしれない。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0784nobodyさん2007/10/20(土) 21:17:55ID:???
>>782
オブジェクト指向のふいんき(←なぜか変換できない)を味わいたかったんじゃない?
0785nobodyさん2007/10/20(土) 21:20:24ID:???
>>783
おまえ頭悪すぎw
0786nobodyさん2007/10/20(土) 21:22:23ID:???
>>741
使用例も挙げてくれ。
0787nobodyさん2007/10/20(土) 21:23:14ID:???
>>784
phpのソースってメンバとかメソッドにアクセス修飾子がついてないクラスをよく見かけるんだよ
Log4phpもそうだったような気がする
0788nobodyさん2007/10/20(土) 21:24:34ID:???
>>786
それくらいソースから判断しろよ
インスタンス化して、calc()を呼び出す
0789nobodyさん2007/10/20(土) 21:27:57ID:???
>>788
じゃあ処理を分化してる意味が全く無いな
0790nobodyさん2007/10/20(土) 21:30:57ID:???
>>789
それは作者に言ってくれ
俺には>>789の意味するところがよくわからないんだが
0791nobodyさん2007/10/20(土) 21:31:28ID:???
作者じゃないならぐだぐだ言うな
0792nobodyさん2007/10/20(土) 21:33:41ID:???
>>791
>>733とか>>738あたりにも同じことを言っておけ
0793nobodyさん2007/10/20(土) 21:34:55ID:???
もしかして>>791って他人のソースも追えないほどアホなのか?
0794nobodyさん2007/10/20(土) 21:36:23ID:???
>>728
こんなんどうでしょうか?

function get_tsurisen($tonyu_kingaku, $konyu_kingaku) {
 $tsurisen_maisu = 0;
 $list = array(1000, 500, 100, 50, 10);
 $tsuri = $tonyu_kingaku - $konyu_kingaku;
 for ($i = 0; $i < count($list); ++$i) {
  while ($tsuri >= $list[$i]) {
   $tsurisen_maisu++;
   $tsuri -= $list[$i];
  }
 }
 return $tsurisen_maisu;
}
0795nobodyさん2007/10/20(土) 21:38:00ID:???
>>787
php4までは修飾子使えない
php5では使えるからその差

因みに例外処理も5から
0796nobodyさん2007/10/20(土) 21:39:45ID:???
>>795
そういうことか、サンクス
0797nobodyさん2007/10/20(土) 21:43:03ID:???
使用する側が便利じゃなきゃオブジェクト化する意味がないな
0798nobodyさん2007/10/20(土) 21:44:02ID:???
貼りまちがい

function get_tsurisen($tonyu_kingaku, $konyu_kingaku) {
 $tsurisen_maisu = null;
 $list = array(1000, 500, 100, 50, 10);
 $tsuri = $tonyu_kingaku - $konyu_kingaku;
 for ($i = 0; $i < count($list); ++$i) {
  $tsurisen_maisu[$list[$i]] = 0;
  while ($tsuri >= $list[$i]) {
   $tsurisen_maisu[$list[$i]]++;
   $tsuri -= $list[$i];
  }
 }
 return $tsurisen_maisu;
}
0799nobodyさん2007/10/20(土) 21:44:36ID:???
>>794
たぶんアウトw
それだとつり銭枚数の合計しか出てこないんじゃないか?
0800nobodyさん2007/10/20(土) 21:50:48ID:???
>>798
あとは$tsuri <0とかチェックをいれたら終わりかな

while文をつかわないで>>730にある商と剰余に置き換えたほうがすっきりする
あと小さいことだけど、毎回count($list)呼び出されるのは嫌なので
$list_cnt = count($list);
for ($i = 0; $i < $list_cnt; ++$i) {
にする

0801nobodyさん2007/10/20(土) 22:00:07ID:???
まともな話をすると急に静かになったなw
0802nobodyさん2007/10/20(土) 22:01:10ID:???
そもそも$tsuri <0だったら、どう返すべきなんだ?
0で返すのか、それともNULL、それとも投入金額分だけ返すのか?
0803nobodyさん2007/10/20(土) 22:03:30ID:???
>>802
俺ならfalseで返す
0804nobodyさん2007/10/20(土) 22:04:09ID:???
つり銭の枚数とか出す所で
投入された金の妥当性とか
買える金額が範囲内なのかを判断するのって変じゃないか?

それは外部ですべきだと思うんだが
もし変な値でつり銭出そうとするなら
それは例外処理にすべきと思う
0805nobodyさん2007/10/20(土) 22:05:15ID:???
>>803
false?phpってfalseで返すの?
javaならnull値で返すのが暗黙の了解事項だけど。
0806nobodyさん2007/10/20(土) 22:07:35ID:???
Cなら0ってなるからなんでもいいんじゃね?
0807nobodyさん2007/10/20(土) 22:08:23ID:???
>>804
外部からメソッドに入ってくる値の妥当性を検査するのは、そのメソッドの仕事
そういう検査していない値を信用して使うのは危ない
エラーを戻り値で対応するのかエラーで対応するのかはプログラミングの規約とかに依る
0808nobodyさん2007/10/20(土) 22:09:49ID:???
>>805
phpは何でも返せるから、エラーのときだけbooleanでそれ以外はarrayとかできる
0809nobodyさん2007/10/20(土) 22:09:54ID:???
>>806
数値を返すところで、0で返すのはまずいだろ。
それじゃ、正常処理か異常処理か分からなくなる。つまり、隠れたバグの原因になる。
0810nobodyさん2007/10/20(土) 22:10:49ID:???
>>807
>エラーを戻り値で対応するのかエラーで対応するのかは
エラーを戻り値で対応するのか例外で対応するのかは
0811nobodyさん2007/10/20(土) 22:11:57ID:???
>>809
phpのソースを見て研究をしたほうがいいと思う
0812nobodyさん2007/10/20(土) 22:17:13ID:???
>>809の問題だと、
f()==falseでは確かにまずいので、0とfalseを厳密に区別するために
f()===falseにするしかないな
(f()は数値を返すメソッド)


http://php.benscom.com/manual/ja/types.comparisons.php
0813nobodyさん2007/10/20(土) 22:23:46ID:???
釣銭勘定モジュールに渡すパラメータの定義が緩い
・購入金額は0円以上
・最低単位は10円であり1円単位の端数は無い
・購入金額は投入金額と等しいかそれ以下

購入キャンセルによる返金は親が面倒見る
0814nobodyさん2007/10/20(土) 23:38:01ID:???
>>813
うんうん、そうだね
0815nobodyさん2007/10/20(土) 23:40:56ID:???
なにいってんだよ
定義はあえて緩くしてるんだろ
その方が実力を測れるじゃねーか
0816nobodyさん2007/10/20(土) 23:41:20ID:???
>>813
ちょっとワロタ。
ちょっとだけだからな!
0817sage2007/10/21(日) 00:43:39ID:???
FreeBSDに、phpをインストールしたのですが、
phpの初期設定ファイルであるpnp.iniが見つかりません。

このファイルは、無い場合は自分で作るのでしょうか?
自分で作る場合は、インストールしたディレクトリと同じ場所におけばよいのでしょうか?

環境情報は、以下の通りです。
・OSは、5.4
・PHPは、5.2

よろしくお願いししす。
0818nobodyさん2007/10/21(日) 01:03:52ID:???
掲示板を制作しており htmlspecialchars に関する質問です。

1.意見をPOSTで送る
2.確認画面で確認
3.それから書込

2.の時点でhtmlspecialchars を入れており確認画面のソースは
<input type="hidden" name="contents" value="&lt;img src=&quot;&quot;&gt;">
(全角にしております)

でここからが問題。
こいつをまた送信すると$_POST['contents']の中身が元の「<img src="">」に
なっちゃうのはなんででしょうか?

$_POST['contents']="&lt;img src=&quot;&quot;&gt;" にならないの??
0819nobodyさん2007/10/21(日) 01:10:23ID:???
>>817
<? phpinfo(); ?> でファイル作りブラウザからでもコマンドライン実行でも見れば載ってない?
大体自分でOSインスコしたならfindとか使えないのか?
0820nobodyさん2007/10/21(日) 01:19:58ID:???
>>818
再送信で何故元に戻るかは知らないけど確認画面にhidden入れない方がいいと思う。
確認画面は表示用のみにして、送信内容(1の意見)自体はセッション関数に入れて3でそれを書き込んだ方がいい
0821nobodyさん2007/10/21(日) 01:34:05ID:???
>>817
慣れないOS使うからだよ
デフォルトのファイル名はphp.ini-dist
これをcpしてphp.iniにリネームしたのを同じ場所に置く
locatedb更新して検索してください
0822nobodyさん2007/10/21(日) 02:05:22ID:???
>>818
&をエスケープしてみろ、てかPHP関係ねぇしオパピ
0823nobodyさん2007/10/21(日) 03:47:36ID:???
でもそんなの関係ねえ
08248182007/10/21(日) 03:54:49ID:???
レスどうも。

$strForm = <<<EOF
<form method=POST action={$_SERVER['PHP_SELF']}>
{$_POST['hoge']}
<input type=submit value="ok">
<input type=hidden name=hoge value="&lt;"> ←掲示板対策で&大文字 &lt;=<
</form>
EOF;

echo $strForm;

これを動かすと「&lt;」ではなく「<」が表示された。

これ以上はスレ違いの気がするので最後に質問。
特殊文字を HTMLエンティティした場合、それを送信しちゃうと自動的に元に戻るってこと?
0825nobodyさん2007/10/21(日) 03:57:50ID:???
lol なんのためにエンティティ化するんだ
0826nobodyさん2007/10/21(日) 04:00:43ID:???
hiddenで送るなよ
08278182007/10/21(日) 04:06:00ID:???
>>825
>>なんのためにエンティティ化するんだ

ウハ! もっともなご意見(^^;
確認画面ですので入力したデータがそのまま表示されてもいい気がするんですが。

でも2ちゃんの確認画面もちゃんとエンティティ化してますよね。
そこらへんどうなんでしょ?
0828nobodyさん2007/10/21(日) 04:14:05ID:???
確認画面に出力したデータを書き込むんじゃない。
確認画面に入力したデータを書き込むんだ。
0829nobodyさん2007/10/21(日) 04:49:54ID:???
>>817
portsからぶち込んだ場合は/usr/local/etcにphp.ini-recommendedとphp.ini-distがある
いづれかをphp.iniとしてコピー
野良makeならphpのマニュアルに沿って解凍ディレクトリ下のphp.ini-recommendedか
php.ini-distをphp.iniとして/usr/local/libにコピー

推奨はphp.ini-recommendedなんだけどエラーメッセージ吐かなかったりと不自由するかも
しれないのでテスト環境ではphp.ini-distを利用するのがいいかも
0830nobodyさん2007/10/21(日) 09:59:43ID:???
>>827
2chで書き込み試したら確かにエンティティ化してhidden使ってるね
セッション使わないのは鯖負荷軽減のため?

ただ普通は、
ユーザが入力(最初)
 ↓
入力データをセッション変数へ保存
表示用にエンティティ化してHTML出力
 ↓
ユーザが確認し書き込みボタン押す
 ↓
セッション変数に保存したものをファイルやDBへ保存
(勿論DB用にエスケープする)

hiddenだろうがテキストエリアに入った文字列だろうがHTML出力する分はすべてHTMLエンティティするのは当然。
問題視してるのは書き込むデータをhiddenで送り返してまたそれを受け取りDB登録しようとしてる点。
0831nobodyさん2007/10/21(日) 10:17:27ID:???
mixi日記もhidden使ってたw こっちはエンティティ化してなかった
0832nobodyさん2007/10/21(日) 10:23:29ID:???
このスレの普通は、普通じゃなさそうだなw
0833nobodyさん2007/10/21(日) 10:38:03ID:???
所変われば常識も変わるってところか
0834nobodyさん2007/10/21(日) 12:10:29ID:k0cThTxS
自宅鯖のPHPがPHP 5.2.4で
sakuraサーバーのPHPがPHP 4.2.2で

php 5.2.4ではclass内でのrequire_once等の使用ができるのに
php 4.2.2だとつかえないみたいなんですけど
これはそういうものなんですか?
includeでも同じでした;;
なにか他に取り込む方法ってないですか?
0835nobodyさん2007/10/21(日) 12:19:55ID:???
そんな話きいたことないしソースみないとわからないが、クラスの外にだしてもどうせクラスが含まれたファイルをよみこむんだから問題ない気がするよ
0836PHPでパスワード付きExcelファイルを読み込みたい2007/10/21(日) 13:11:20ID:SzVd/yWp
Windows上でPHP5を使っています。
そのマシンにはExcelがインストールされておらず、
Excelファイルには、Excelのパスワードがかかっています。

で、そのExcelファイルをバッチ処理か何かで読み込みたいと考えています。

Perlだと、Win32::OLEかSpreadsheet::ParseExcelを使って読み込むそうですが、
前者はExcelがインストールされていないtダメですし、
後者はパスワードで保護されたExcelには対応していないんだそうです。

そこで、PHPを使おうと思っています。
ここで質問です。

調べたところによると、PHPでは、PHPExcelを使うと思うのですが、
パスワード付きのExcelは読み込めるのでしょうか?

あるいは、ほかに簡単に読み込める方法があれば、教えてください。
よろしくお願いします。
0837>>8172007/10/21(日) 14:20:59ID:???
>>819
>>821
>>829
できました!
ありがとうございます!

0838nobodyさん2007/10/21(日) 15:16:08ID:???
どういたまして
0839nobodyさん2007/10/21(日) 15:52:06ID:???
>>836
OOoを使う
あれならパスワードつきも普通に開けるだろ
0840nobodyさん2007/10/21(日) 17:04:17ID:???
>>839
ためしてからいえ
0841nobodyさん2007/10/21(日) 17:41:02ID:KqyRsNL6
質問です。
住所録みたいなツールを作って、データを登録するとします。
で、DB側ではid(自動インクリメント)を持たせてるとして、
たった今登録したデータのidを拾いたいときってどうしたらいいんですか?
phpから実行するsql文で最新のデータのidを拾えばいいと思ったんですが、
複数人から同じテーブルに次々書き込みがあった場合、自分の書き込み後に
他人が登録したデータを拾ってしまうということはないでしょうか?
0842nobodyさん2007/10/21(日) 17:51:15ID:???
>>841
マニュアルのmysqlのページ。
DB側でもできるけど。
0843nobodyさん2007/10/21(日) 18:37:14ID:???
>>840
試してから言ってるわぼけ
08448362007/10/21(日) 18:38:11ID:???
すこしだまっててくださいね、偽ってる暇人訓^^
0845nobodyさん2007/10/21(日) 18:49:34ID:???
>>836
>>1
0846nobodyさん2007/10/21(日) 18:59:57ID:???
メールフォームで送信した後、
「送信しました(2ちゃんだと『書き込みました』)」というページを表示するじゃないですか。
この際にブラウザーで戻れなくする方法ってないですかね?

何がしたいかというと二重送信を防ぎたいわけですが
チェック用のファイルを用意して防ぐようにもします。
ですがブラウザーそのものが戻らないようにできないもんですかね?

header("Location :http://example.com";)でいけるかと思ったんですがダメでした…
アドバイスを。
0847nobodyさん2007/10/21(日) 19:05:00ID:???
戻った場合の責任は負いかねますとか書いとけばok
0848nobodyさん2007/10/21(日) 19:07:21ID:???
>>846
>二重送信を防ぎたい
ぐぐればやり方はいくつか載ってるよ
ただクライアント側で何とかしようとするのは感心しない
やるならサーバ側
このへんの理由もぐぐれば書いてある
0849nobodyさん2007/10/21(日) 19:13:54ID:???
>>846
セッションに前いたページを覚えさせておいて
戻ったページで正しい遷移でなければ、前いたページにリダイレクトとか。
0850nobodyさん2007/10/21(日) 19:24:28ID:???
>>849
二画面開いてたらややこしいことにならないか?
08518462007/10/21(日) 19:40:55ID:???
レスあり〜

>ただクライアント側で何とかしようとするのは感心しない
>やるならサーバ側
そそ、書くの忘れていた。
クライアント側、たとえばJavaScriptとかでするんじゃなくて
サーバー側で処理をしたいんですよね。

「PHP 二重送信 防止」ぐらいでググッてるんですが
『クライアントサイドのスクリプトで二重送信を防止するのは難しい』
とか言われている俺ガイルww
08528462007/10/21(日) 19:45:54ID:???
ググった結果、よさそうな方法が見つかりましたw
回答ありがとうございました。
08538462007/10/21(日) 19:51:46ID:???
>>852
ちょ!必死に探しているのに詐称すんのやめて(つд`;)
つーか解決法がみつからない。
(ページの間に別のphpファイルを挟んで実行・header処理している人がいて感動)

ここって前まで上げてID表示していなかったっけ?
荒らされたんかな?
0854nobodyさん2007/10/21(日) 19:53:39ID:???
ずっとIDを出してないと意味ねーし
0855nobodyさん2007/10/21(日) 19:58:07ID:???
とりっぷつければイイノに
0856nobodyさん2007/10/21(日) 20:19:58ID:???
>>853
いや、ID出したきゃ出せばいいじゃん。
出さずに詐称すんなとかバカの言い分。
08578462007/10/21(日) 20:34:37ID:???
>>853
ちょっと待て!お前誰だよw
まぁ解決方法が見つからないのは本当なんだけどさ…。

もう少しググッてみたいと思います!
偽者が出てきたのでもう書き込まないようにします。迷惑かけてごめんなさい!
08588462007/10/21(日) 20:36:02ID:???
ちなみに852も偽者です。言い忘れました…。
0859846 ◆yBEncckFOU 2007/10/21(日) 20:41:35ID:???
>>857-858
ちょっと騙るのやめてくんない?こっちは真剣なんです!
08608462007/10/21(日) 20:41:49ID:???
偽者ばっかりで困っています
どうすれば良いですか?
08618462007/10/21(日) 20:41:56ID:???
めるぽ
0862nobodyさん2007/10/21(日) 20:45:25ID:???
ばか、ばっか
0863nobodyさん2007/10/21(日) 20:58:29ID:???
たまにこういうことがあるから面白い
0864nobodyさん2007/10/21(日) 21:07:02ID:???
最近はほぼ毎日じゃねーか
0865nobodyさん2007/10/21(日) 21:10:16ID:???
二重送信はsessionやJavaScriptで防げるが
ブラウザーのボタン制御は無理だろ?
0866nobodyさん2007/10/21(日) 21:12:26ID:???
過疎りすぎて人もよりつかないスレよりはマシだと思うよ
脱線し過ぎるのはアレだけど
08678362007/10/21(日) 21:26:20ID:SzVd/yWp
偽者がいますね(´・ω・`)

>>839
OpenOfficeでパス付きExcelが開けるのは知っていますが、
手で開くのではく、自動処理(バッチ処理等)で読み込みたいと考えています。

OOoでそういう使い方ができるのでしょうか?
0868nobodyさん2007/10/21(日) 21:43:50ID:???
>>865
送信元画面をPOSTで生成しとくとか。

いっそ送信元画面にJavaScript仕込んどいて送信完了時に
発行したCookieを発見したら強制Locationかけちゃうとかw
0869nobodyさん2007/10/21(日) 22:01:51ID:???
>>867
必要にせまられてるのはアンタだから試してみればいいんでないの?
良かったじゃん、人柱になれて
0870nobodyさん2007/10/21(日) 22:25:47ID:MevNDFNf
カレンダーを作っていますが
PHPの日付関数はunixタイムスタンプを使うので
2038年?以降のカレンダーは表示できなくなります。
unixタイムスタンプ問題を回避してカレンダーを作るには
どうすればいいですか?
0871nobodyさん2007/10/21(日) 22:28:44ID:???
>>870
日付も曜日も自分で管理したらいい

だが、そもそも30年以上も先のカレンダーを表示する必要があるのか?
0872nobodyさん2007/10/21(日) 22:47:48ID:???
>>846
まあ送信とか戻るのはユーザが行うことだからWebサーバで禁止できることじゃないとおもうけど。

期限切れで表示できないのとかあるね。
どうやっているのか知らないけど。

送信してしまった対策として一定時間内のIPや内容のハッシュでも記録しておいて
同じのがあったら無視するとか。
しつこい書き込みはIPを2chみたいにバーボンにするとか。
0873nobodyさん2007/10/21(日) 23:52:14ID:mLa5/CiA
動的ページのsitemapや更新のあったページをのせるrssを自動で発行するものを作りたいのですが、
どんな流れで作ればいいんでしょ。
0874nobodyさん2007/10/21(日) 23:55:29ID:???
更新内容→DB登録
↓
RSS出力
0875nobodyさん2007/10/22(月) 00:02:30ID:???
>>873
またおまえか
0876nobodyさん2007/10/22(月) 00:07:13ID:???
>>870も>>873も表現がおかしい
それはもう暗黙に作ってくださいとお願いしているようなもの
0877nobodyさん2007/10/22(月) 00:11:31ID:???
そうか・・?
0878nobodyさん2007/10/22(月) 00:17:27ID:???
>>876
そういう直接的な注意は不粋というものだ
どんな質問にも答えることはできる
質問者が気づくかどうかは知らんけど

0879nobodyさん2007/10/22(月) 00:19:42ID:???
>>876
870は問題ないような?
873は全然ダメだと思うけど。
0880nobodyさん2007/10/22(月) 01:31:08ID:???
プログラミング系スレで一番低レベルなスレ
0881nobodyさん2007/10/22(月) 01:34:58ID:???
2chでレベルとか言っちゃう奴って恥ずかしくないのかなぁ
0882nobodyさん2007/10/22(月) 01:41:18ID:b3zF2Ui7
またかといわれても初めて質問するのにどうすればいいんだろう。
0883nobodyさん2007/10/22(月) 01:46:50ID:???
>>880
タイトルがスレの有様を物語ってるからいいんだよ
■ このスレッドは過去ログ倉庫に格納されています