【PHP】下らねぇ質問はここに書き込みやがれ 45
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/05/12(土) 16:42:48ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 45
http://pc11.2ch.net/test/read.cgi/php/1177635762/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0612nobodyさん
2007/06/04(月) 12:26:25ID:???ってわかってるやつは切ればいいんだけど。
サーバをいじれない環境だと.htaccessでやるしかなくて、
できるかどうか確認するのまでどきどきしちゃうw
0614nobodyさん
2007/06/04(月) 12:38:17ID:???0617nobodyさん
2007/06/04(月) 16:47:52ID:???あれは、脳の中にcronの仕組みがあるという認識で間違っていませんか?
0619nobodyさん
2007/06/04(月) 17:48:34ID:6QRX92pz>中身を隠蔽しておいた方が後で使い回せるし
classに隠蔽したほうが使いまわせれるというのはどういうことですか?
毎回オブジェクトをつくらないといけないですよね?
>>画面遷移が増えてきたり
フォームかurlでしか次の表示に変数は渡せないですよね?
0620nobodyさん
2007/06/04(月) 18:14:19ID:N4khH+faセッションはクッキーと違い、変数をサーバー上に保存しておくものだと本で読みました
ということは、あるユーザーが取得したセッションで管理されてる変数を、
同じページを開いた別のユーザーも共有できるのかと思い、試してみましたができませんでした
これはなぜでしょうか?
ちなみに下記の方法で試してみました
↓ソース
test.php
<?php
session_start();
if(!isset($_SESSION["count"])){
$_SESSION["count"] = 0;
}
else{
$_SESSION["count"] ++;
}
echo $_SESSION["count"];
?>
PCが一台しかないので、同じPC内の2種類のブラウザ(IEとファイアーフォックス)で実験
1 IEで開いてF5を連打し、カウントを適当な数まで増やす
2 ファイアーフォックスで同じページを開く
ファイアーフォックスで開いたとき、IEで表示されているカウント数に関係なく 0 が表示されました
なぜでしょうか?
0621nobodyさん
2007/06/04(月) 18:33:08ID:lLfrP8Zc0624虚弱PHP
2007/06/04(月) 19:03:20ID:???厳密には正しくないけど最初は↓みたいに理解するといいかも。
○ユーザー毎にセッションIDが付けられる。
→ これをブラウザのクッキーに保存
○セッションID毎にセッションファイルが作られる。
→ ブラウザクッキーとして送られたセッションIDをもとに読み出し
0626441
2007/06/04(月) 21:51:29ID:g5MJj3HB>classに隠蔽したほうが使いまわせれるというのはどういうことですか?
>毎回オブジェクトをつくらないといけないですよね?
確かに、書き捨ての簡単な処理しか必要ない、機能追加もメンテも全部一人でこなすというのなら
無理にする必要は無いとは思うけど。
ただ、使えるけど使わない 使えないから使わない
は全然違うから、とりあえず使えるようにすることから始めてみればいいのでは。
メリットを理解するのは
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248617/ とか、
ttp://www-06.ibm.com/jp/developerworks/opensource/060901/j_os-php-designptrns.shtml とかか、
>画面遷移が増えてきたり
>フォームかurlでしか次の表示に変数は渡せないですよね?
有る意味ではその通りだし、有る意味では違うともいえるかも。
class云々とは若干離れるが、
変数(+オブジェクト)の受け渡しは、 serialize ttp://jp.php.net/serialize を使う方法もある。
最近は json and xajax 使ってるけど。 なるべく画面遷移させたくないからね。
単純な登録・更新・削除だけだと、べたべた書いても変わらないけど
curl+パース→結果によりPOSTを分岐+DB格納 とかを組み合わせた
バッチ系の処理を書くと、クラス化して隔離・隠蔽しとかないと、あとで訳わからなくなってくるんすよ。
まぁ覚えておいて損は無いからまずは習得+模倣から始めればよいと思う。
0627nobodyさん
2007/06/04(月) 21:58:09ID:???>ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248617/ とか、
これはいくらなんでも電波だな。電波と言うか無内容
0628441
2007/06/04(月) 22:13:23ID:g5MJj3HB平易で良くまとまっているポインタが有れば、差してくださいな。
中・高・大・大人(というか環境)によって見え方と捉え方が違うから難しいっす。
0629nobodyさん
2007/06/04(月) 22:26:07ID:5+o3owYSいつ使ったらいいかわからないんです
単に遠まわしにしているとしか感じないです。
ただのユーザー関数とクラス化したもので
例えばどういう処理orアプリにおいて便利なるんですか?
ユーザー関数だと、こういう風に格納しまくらなきゃいけなくて
オブジェクトならこんな風に数行で…みたいな
0630nobodyさん
2007/06/04(月) 22:35:46ID:???0631441
2007/06/04(月) 22:35:58ID:g5MJj3HB乱暴に一言でいうと、単純なユーザー関数だと、抽象化 継承が出来ない。
一連の機能を継承して新たな機能を派生で作るとかね。
遠回しという感覚は確かにその通りに感じると思う。
というか遠回しにしているからこそ拡張出来る。
だから、有る程度の複雑性と多様性が無いと、純粋なコードを書く量は増えてしまうだけで、
メリットを享受出来ないかも。
0632nobodyさん
2007/06/04(月) 22:43:50ID:???一人で開発していて、再利用するつもりもなくて、拡張性の必要もない場合に加えて、
言語はPHPというなら、別にOOPする必要はないんじゃないか。
0633nobodyさん
2007/06/04(月) 22:50:17ID:???とりあえずOOPで書いてみて何がいいのかを体感しようとせず
頭だけで理解しようとする奴にはいつまでたっても無理だから
0634nobodyさん
2007/06/04(月) 22:57:02ID:???そうだと思うよ。急いでその場しのぎで作るなら無理にする必要はないとも思う。
OOPが目的のOOPでの実装は意味がないと思っている。
趣味とか、やっつけ仕事、数百行程度の実装なら別にいいんじゃないか。
ただ、そのまま機能を作り込んでいくと、
「あの機能とよく処理にてる」とか
「あの処理のあの機能を引っぺがして、ちょこっと変えてこっちにも組み込みたい」
「ほとんど似ている手続きなんだけど微妙に分岐が違う一連の手続きを定期的に連続実行したい。」
とかが頻発してくる。
んで、よく似た同じ事をコピペとかでくむと、後で修正するときも、同じような機能で微妙に違う箇所を
grepして抽出して、書き換えるとかいった面倒なことになる。書き換えるだけならいいけど、テストも過給的に
増えてメンドクセーとかね。
だから、必須ではないけど、使えるようにしておいた方が何かとつぶしは効くかも。
0636441
2007/06/04(月) 23:03:21ID:g5MJj3HBID晒し忘れた。
0637nobodyさん
2007/06/04(月) 23:12:23ID:gV5OyYxv0638nobodyさん
2007/06/04(月) 23:22:45ID:???0639nobodyさん
2007/06/04(月) 23:24:34ID:???0640nobodyさん
2007/06/04(月) 23:25:12ID:???0641nobodyさん
2007/06/04(月) 23:29:34ID:???↓
人のソースを見て、自分のソースをリファクタする。
これが、最強の教育アルゴリズム。
0642nobodyさん
2007/06/04(月) 23:33:42ID:???0643nobodyさん
2007/06/04(月) 23:35:13ID:???0644nobodyさん
2007/06/04(月) 23:42:42ID:???ありがとうございます トランバック、RSS、コメントにそれらを管理するものetc
確かに勉強になりそうです
>>641さん方式が向いてそうなのでそれで進めてみますが、おすすめの既存ソースはありますか?
読みやすくて完成度が高いもの、XSS等虚弱性なんて当然なくて
サニタライズがしっかりしているものはどんなものがありますか?wordpressのように高機能でなくて良いです
0645nobodyさん
2007/06/04(月) 23:43:59ID:???http://developer.yahoo.co.jp/
とか使ってなんか面白いものを作るとか。
生きてて変化するデータを使う方が何かと楽しいとは思う。
0646nobodyさん
2007/06/05(火) 00:03:22ID:???0647nobodyさん
2007/06/05(火) 00:26:04ID:/9Tx9T4K0648nobodyさん
2007/06/05(火) 00:31:46ID:m4nsZU4oああー
まずは継承や再利用の価値を勉強すればいいんですね
0649nobodyさん
2007/06/05(火) 00:58:06ID:???if($string == "1"){
$string == "一";
}
0650nobodyさん
2007/06/05(火) 01:03:27ID:???function hoge($val) {
if ($val==0) {return '零';}
$len = strlen($val);
$j = 0;
$kansuuji = array('','一','二','三','四','五','六','七','八','九');
$kurai1 = array('','十','百','千');
$kurai2 = array('','万','億','兆');
$answer = "";
for ($i = $len-1; $i >= 0; $i++) {
if (0==($j % 4)) {
$answer .= array_shift($kurai2);
} else {
$answer .= $kurai1[$j % 4];
}
$answer .= $kansuuji[substr($val, $i, 1)];
}
$j++;
}
}
ちゃんと動くかは知らん
0651nobodyさん
2007/06/05(火) 01:06:28ID:???唯一イベント駆動型のGUIで意味がある。ウインドウやボタンをオブジェクトとして、
オブジェクト毎に色や形(プロパティ)やイベント(メソッド)を定義するだけだから。
0652441
2007/06/05(火) 01:06:53ID:J7TorZ22継承と再利用の価値は 勉強つうか >>630 だとおもう
1)仕事じゃないんだったら、最初は周りくどいことは気にせずテキトーに Aという仕組みを作ってみる。
(登録・更新・削除・参照・バッチ処理があるようなものがいいか)
↓
2)テキトーに作ったAを機能分割、汎用化して一つ一つの処理の複雑度を下げてA’を作る
↓
3) 2を使ってBを作ってみる
↓
4) 1を使って Bを作ってみる
という流れかもね。
初めからいきなり 2) → 3)が作れればそれが最短だけど、
1)を作れないのならば、いきなり抽象化と再利用ができるようにはならないかも。
ついでに言うとコーディングレベルでの抽象化と再利用だけだとうまく分割出来ないともいえる。
規模・要件によって、最適解と抽象化の粒度は異なるわけ。
再利用する必要が無いものを、汎用化して工数が余計に掛かる位ならべた書きでも
速攻仕上げた方が最適だったりする。
0653nobodyさん
2007/06/05(火) 01:07:36ID:???1文字だけ変えるのなら>>649のような感じでいいけど、
数文字いっぺんに変えるなら正規表現で置き換えのほうが楽。
30000を三万とかにするならかなり複雑になると思う。
0655nobodyさん
2007/06/05(火) 01:10:08ID:???これ以上やるならクソスレ立てて誘導します。
0657nobodyさん
2007/06/05(火) 01:21:00ID:???反論があれば具体的にどーぞ。
Railsがどんな功績や効率的な処理を実現しましたか?
ほんとCGI系でオブジェクト指向なんてひとつも意味無いから。
RubyはVisualCOBOLみたいなもんだよ。アホな人的資源の救済措置。
0658nobodyさん
2007/06/05(火) 01:25:07ID:J7TorZ22ここがそのクソスレ(ry
すまん 吊ってきます。
0659nobodyさん
2007/06/05(火) 01:26:25ID:???全て手続き型で実現可能な物事です。まぁ当たり前なんだけどね。
オブジェクト指向自体が手続き型で実装されているわけだから。
自分で実際やってみるとわかるけど、スクリプト言語でオブジェクト指向的
振る舞いを繰り返すと、すぐに重くてどうにもならなくなる。
また全体に知能が低めに設定されているのか、オブジェクト指向派は動的な
構成を好み、決まってHTMLを生成しようとしない。
0661nobodyさん
2007/06/05(火) 01:58:10ID:???な。知能低いだろ。HTML生成型という発想そのものが無く、Cで書けば速いと
思い込んでいる。自分で書いたことも無さそうなのにw
こんな5年10年使い込まれた泣き言が飛び出すとは、この糞スレだけ時の流れが
止まってるのでしょうか。サーバサイドは誰でもどんな時代でも少しでも軽い方が
良いに決まっているのにねぇ。私はカウンタだけCで書いています。関係無いけどね。
0662nobodyさん
2007/06/05(火) 02:04:37ID:???議論は他にいってやってください。
0666nobodyさん
2007/06/05(火) 02:14:37ID:???社内向けシステムなら動的にページを生成したときの
レスポンスの悪さもある程度がまんしてもらえるけど
ネットに公開するようなサイトだとそれだと困るからな〜
0667nobodyさん
2007/06/05(火) 02:34:09ID:???スレのサブタイトルに、「日本共産党員お断り」って入れておいて。
0669668
2007/06/05(火) 04:21:30ID:???0670虚弱PHP
2007/06/05(火) 10:16:30ID:???0671nobodyさん
2007/06/05(火) 11:54:18ID:4B8PpfOt<?php header("Location: 転送先URL"); ?>
だけテキストで入力して、
その後、拡張子をPHPにすればOKでしょうか?
あと、このリダイレクトの方法って、メタと違って
ブラウザ側で拒否出来ないという認識で問題ないですか?
0673nobodyさん
2007/06/05(火) 13:08:10ID:???ブラウザで拒否できないというか、
正常なブラウザならhttpヘッダを見て挙動を決めるので、
それでリダイレクトされる。
逆にそれでリダイレクトされないなら、
そのブラウザがブラウザとしての最低限の機能を搭載してないってこと。
つまりブラウザにあらず。
0674nobodyさん
2007/06/05(火) 13:19:13ID:4B8PpfOt有り難うございます。
一応、動くのは試してみてわかっているのですが、
PHP自体をほとんど理解していないので
なにか足りないのではないかと
ちょっと心配になり聞いてみました。
>>673
有り難うございます。
PHPは現在、初心者本片手に勉強してるんですが、
まだまだ理解が乏しいので助かりました。
言われてなるほどですね。
0675nobodyさん
2007/06/05(火) 13:29:59ID:???セッション関数を使うと、「セッションクッキー」という特殊なクッキーが
自動で発行される。
>セッションはクッキーと違い(中略)あるユーザーが取得したセッションで管理されてる変数を・・・
共有できるわけねぇだろ、と。
それじゃセッションの意味がないだろ、と。
0676nobodyさん
2007/06/05(火) 14:32:50ID:???0677nobodyさん
2007/06/05(火) 14:40:10ID:J1A5BxRH標準の関数oci_connect等を使うか、
PEARのDBクラスを使うか、
PDO関数を使うか、どれを使えばよいのか迷っています。
好きなものを使うべきなのでしょうが、
皆さんならどれを使いますか?
0678nobodyさん
2007/06/05(火) 14:57:10ID:???0679nobodyさん
2007/06/05(火) 15:19:54ID:fm5P/WUSPHPスクリプトを暗号化しようと思い
php_screw( ttp://www.pm9.com/newpm9/itbiz/php/ )をインストールし
php.iniにextension=php_screw.soと記述し、phpを実行すると
以下のようなエラーが出てしまいます。
PHP Warning: Unknown(): Unable to load dynamic library
'/usr/local/lib/php/extension/no-debug-non-zts-20020429/php_screw.so' -
/usr/local/lib/php/extension/no-debug-non-zts-20020429/php_screw.so:
cannot open shared object file: No such file or directory in Unknown on line 0
No such file or directorといわれていますが実際にファイルは存在しています。
何らかの原因でロードできていないんだと思いますが、検討がつきません。
どなたか分かる方いらっしゃらないでしょうか?
環境は Linux(CentOS4.4) + PHP 4.4.4です。
0680nobodyさん
2007/06/05(火) 15:24:34ID:Q4Q2J1Ec「オープンソースでの開発経験をお持ちの方」
って書いてあったんだが、気にしなくていいよな・・・
いいバイト先ないかなぁorz
0682nobodyさん
2007/06/05(火) 15:33:04ID:???開発に参加っていってもパッチを送る位なら履歴書を書きながらでもできるだろ。
適当なハックを見繕ってプロジェクトのMLにポストすりゃいいのよ。
0683nobodyさん
2007/06/05(火) 16:10:55ID:???Java だと、以下のような感じでできた。
Long mylong = new Long("1181025482687");
Date date = new Date(mylong.longValue());
System.out.println(date);
PHP で同じようなことをしたいと思い、
$param = "1181025482";
$today = date('Y-m-d H:i:s', $param);
print($today);
こんなコードを書いたが、date() や gettime() は int 型しか受け取れない。
Java みたいに long を受け取れる関数はありますか?
やりたいことですが、今使っている他システムが、ログに時刻を Unix タイムスタンプ(long型)で
出力しやがるので、それを見やすくする web 変換ページを作りたいのです。
0685nobodyさん
2007/06/05(火) 16:18:48ID:Ku9URNE5割って位を出していくでしょ?
数が巨大になると、PHPが整数として扱える範囲を超えて、
割れなくなる。
この難問どうすれば解けますか?
0687683
2007/06/05(火) 16:26:41ID:vO+V39fBサーバのOS:CentOS4.4
PHPのバージョン:PHP 4.3.9
Webサーバ:2.0.52
0688nobodyさん
2007/06/05(火) 16:48:52ID:???そのコードで何が問題?
>>685
http://php.net/base_convert
0690683
2007/06/05(火) 16:58:40ID:vO+V39fBdate() 関数に 1181025482687 のような13桁を渡すと、
オーバーフローしてしまいます。
Long mylong = new Long("1181025482687");
Date date = new Date(mylong.longValue());
System.out.println(date); // 2007/06/05 15:38:02 が表示される
同じ "1181025482687"を >>683 のコードに渡すと
2038-01-19 12:14:07 が表示されてしまいます。
>>683 のように、"1181025482"(後ろ3文字をカット)すると、
2007-06-05 15:38:02
が表示されます。
実際にはミリ病は必要ないのでこれでいいのですが、
PHP でも、Java のように long 型で受け取れないのかなと思い
質問しました。
>>689
キャストしてみた。
$param = "1181025482687";
$today = date('Y-m-d H:i:s', (int)$param); // (intをつけた)
結果は、やはり 2038-01-19 ・・・ が表示されてしまう。
0691nobodyさん
2007/06/05(火) 17:00:10ID:???date('Y-m-d H:i:s',1181025482687 / 1000)
2007-06-05 15:38:02
割ればいいんでないの?
0692683
2007/06/05(火) 17:11:04ID:vO+V39fBとりあえず割ることで対応しました。
自分が作った関数には13ケタの数字をそのまま渡したいのですが、
出力にはミリ秒が含まれなくても別にかまわないので。
# date() の出力フォーマットにミリ秒が出せるのは、PHP 5.2.2 からのようですね
http://www.php.net/manual/ja/function.date.php
をみると、date() の引数は int 型なので、結局 long は渡せないし、
ほかにそのような関数もない、ということなのかな。
っつーか http://www.php.net/manual/ja/language.types.php を見ているのですが、
もしかして PHP は long がない?
(整数は、10進だと10ケタまで?)
すみません、頭の中がJavaかCなもので・・・
0693nobodyさん
2007/06/05(火) 17:13:06ID:???ミリ秒単位で渡すなよ.
例え桁あふれがなくても1181025482687秒と認識されるだろが
0694nobodyさん
2007/06/05(火) 17:21:02ID:???普通にlong型はないね。
intの範囲(-2147483647〜2147483647)を超えるとfloatになる。
0695683
2007/06/05(火) 17:29:28ID:vO+V39fBレスどうもありがとうございます。
すみません、Unix タイムスタンプ(time_t ?)という書き方がよくなかったでした。
やりたかったことは、とにかく 時刻表現が1970/1/1 からのミリ秒として13ケタの数字でわたってくるので、
これを人間の読めるようにしたかった、でした。
PHP の time() 関数が、精度を秒で返すのは、
PHP の time() が C の time() でできているからかな?
0696nobodyさん
2007/06/05(火) 17:36:10ID:???0697nobodyさん
2007/06/05(火) 17:43:47ID:???その問題は変数の型とは全く関係ないっしょ。
確かにDate.getTimeとかで1970/1/1からのミリ秒で返ってくるんだろうけど
それは「UNIXタイムスタンプ」とは非なるもの。
適当に3桁削るか自作関数作りなるなりして対応すればいいんでないの.
つかマニュアル見れば分かることだけどlong型なんてないし
型が違ったら自動的にキャストしてくれるから引数の型は意識しなくもいい。
$param = "1181025482";
$today = date('Y-m-d H:i:s', $param);
print($today);
そもそも最初の例のこれだと$paramはstring型だしな。
0698nobodyさん
2007/06/05(火) 17:47:29ID:???クダラネー
0700nobodyさん
2007/06/05(火) 18:11:13ID:DIaHasCnこれって、サーバがやられてしまったのでしょうか?
<iframe src='http://quickcnt.com/ld/axhst/' width='1' height='1' style='visibility: hidden;'></iframe>
0702nobodyさん
2007/06/05(火) 18:39:10ID:???0703nobodyさん
2007/06/05(火) 18:41:05ID:???0704700
2007/06/05(火) 19:03:42ID:DIaHasCn>>自分のスクリプトに穴があるとは考えないんだな
問題のあるコードを書いているかもしれません。。。
>>Dreamweaver使ってるんじゃまいか?
使ってます、問題あるのでしょうか?
>>自鯖ならそく閉鎖しる
閉鎖しました
0705nobodyさん
2007/06/05(火) 19:05:35ID:???はやいなw
0706nobodyさん
2007/06/05(火) 19:21:06ID:???http://www.itmedia.co.jp/enterprise/articles/0702/08/news027.html
0707nobodyさん
2007/06/05(火) 19:37:41ID:???0708nobodyさん
2007/06/05(火) 19:55:06ID:???脆弱性のあるスクリプトがどういうものなのか気になる。
今後の参考にもぜひみせてもらいたい。
0709nobodyさん
2007/06/05(火) 20:34:47ID:6blsZ/zSというのは、どういう風に表現されるのですか?
変数Aに、値が入っていなかったら、変数Bを変数Xに代入せよ。
変数Aに、値が入っていたら、変数Xには変数Aを代入せよ。
ということを書く場合、
if($a==""){$x=$b}
else
{$x=$a}
じゃ、うまくいかないんですが、未定義・null・値が入ってない、
といったことを表現するのはどう表現するのでしょう?
0710nobodyさん
2007/06/05(火) 20:38:11ID:???http://jp.php.net/empty
0711nobodyさん
2007/06/05(火) 20:38:22ID:???「初心者ですが教えて下さい。」←これタブーね
if($a){
echo "入っています";
}else{
echo "入っていません";
}
■ このスレッドは過去ログ倉庫に格納されています