【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カテゴリ)の各スレで
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 "入っていません";
}
0712nobodyさん
2007/06/05(火) 20:41:11ID:???ttp://jp.php.net/manual/ja/function.isset.php
ttp://jp.php.net/manual/ja/function.is-null.php
ttp://jp.php.net/manual/ja/function.empty.php
0714nobodyさん
2007/06/05(火) 20:47:01ID:MIae8p3rimagepng()で作成した場合はちゃんと透明化されるのですが、
imagegif()を使用すると透明化されません。
サーバによって上手くいく場合もあるのですが何を調べるべきなのかもわからない状態です。
何かご存知でしたらご教授お願いします。
↓テスト用にソースを抜き出しました。
<?
$image = imagecreatetruecolor(20,20);
$color = ImageColorClosest($image,255,255,255);
for($i=1;$i<=10;$i++){
for($j=1;$j<=20;$j++){
imagesetpixel($image,$j-1,$i-1,$color);
}
}
$color = ImageColorClosest($image,200,0,5);
//透明にする予定の色で半分だけ塗りつぶし
for($i=11;$i<=20;$i++){
for($j=1;$j<=20;$j++){
imagesetpixel($image,$j-1,$i-1,$color);
}
}
$permeateColor = ImageColorClosest($image,200,0,5);
imagecolortransparent($image,$permeateColor);
$file = "./test.gif";
imagegif($image,$file);
//$file = "./test.png";
//imagepng($image,$file); これならうまくいく
0715nobodyさん
2007/06/05(火) 20:51:11ID:6blsZ/zSすごい すごい!
こんなに素速く返事があるなんて!
あまりに初歩的すぎて、皆さんから怒られるかと思いましたが、
適切なご教示を頂きありがとうございました。
マニュアルとか解説系HPでも分からなかったのですが、
isset ってのも見かけては居たのですが、その変数が宣言されて
いるかどうかを調べる関数に違いないと即断していました。
いろいろあるんですね。
ありがとうございました m(..)m
0716nobodyさん
2007/06/05(火) 20:51:41ID:???> サーバによって上手くいく場合もあるのですが何を調べるべきなのかもわからない状態です。
とりあえず上手くいくサーバといかないサーバのGDのバージョンをリストアップしてみれば
0717nobodyさん
2007/06/05(火) 21:07:48ID:EQxq7rXderror_reporting(E_ALL);
if(isset($_COOKIE["hoge"])){
ini_set("session.gc_maxlifetime",14*86400);
ini_set("session.cookie_path","/hogehoge/");
ini_set("session.cookie_lifetime",14*86400);
ini_set("session.save_path","./hogehogehoge/");
ini_set("session.use_only_cookies",1);
session_start();
$sestmp=$_SESSION;
session_destroy();
session_id(md5(uniqid(rand(),true)));
session_start();
$_SESSION=$sestmp;
}
//以降省略
上記のコードですが、テスト環境(Windows+AN HTTPD+PHP5.2.1)では問題は無いのですが、レンサバ(Linux+Apache1.3+PHP5.1.6)で動かした所、特にエラーメッセージ等も無いのにセッションファイルがカラッポ(0バイト)になってしまいます。
単にsession_start();とした場合は期待通りに動作するのですが、session_start();session_regenerate_id(true);では駄目でした。
ローカルではいずれも意図した通りに動作するのに、何故レンサバでは動かないのでしょうか?
また解決するにはどうすれば良いのでしょうか?
0718nobodyさん
2007/06/05(火) 21:09:00ID:???アルゴリズムが難解すぎて…
具体的にどうやればいいですか?
>>688
最初はそれ使ってましたが
巨大になると挙動がおかしくなるんです
// ここまではok
echo base_convert('fffffffffffff',16,16);
// ここからng
echo base_convert('ffffffffffffff',16,16);
0719nobodyさん
2007/06/05(火) 21:28:52ID:???0720nobodyさん
2007/06/05(火) 21:30:26ID:???環境依存すぎ。
そういうことするまえに、
なにもせずに
session_start();で
var_dump($_SESSION);
が可能かどうかをしめすべきだ。
0721717
2007/06/05(火) 21:42:20ID:EQxq7rXdローカル、レンサバ共にarray(0) { }でした
環境依存と言いますと、どこかに汎用性の無い関数でも使っていましたか?
session.cookie_path等は前述のように単にsession_startした場合は大丈夫でしたので問題は無いと思います。
0722nobodyさん
2007/06/05(火) 22:09:27ID:???>アルゴリズムが難解すぎて…
ふむ、どの辺まで考えたの?
>巨大になると挙動がおかしくなるんです
まぁその理由はマニュアルに書いてあるけどね。
0724nobodyさん
2007/06/05(火) 22:21:26ID:???ココだけ見ると COOKIEが無いときは永久に通らないという罠
一行づつデバグしろよ
あと、/hogehoge/のパーミッションエラーとかはマジ勘弁
0725nobodyさん
2007/06/05(火) 22:23:44ID:???function bc_base_n2ten($num, $n) {
$len = strlen($num);
$result = ??
for ($i=0; $i<$len; $i++) {
$result = bcadd($result,
bcmul(base_convert($num[$i], $n, 10), bcpow($n, $len - $i - 1)));
}
return $result;
}
function bc_base_ten2n($num, $n) {
$len = strlen($num);
$result = ??
for ($i=0; $i<$len; $i++) {
$surplus = bcmod($num, $n);
$num = bcdiv(bcsub($num, $surplus), $n);
$result .= base_convert($surplus, 10, $n);
}
return preg_replace("/^0+/", ??, strrev($result));
}
function bc_base_convert($num, $n, $m) {
$num = bc_base_n2ten($num, $n);
return bc_base_ten2n($num, $m);
}
PEAR探さばこういうのあるかもしれないけどシラネ
息抜きに作ってみたからちゃんと動作するかもシラネ
0726nobodyさん
2007/06/05(火) 22:26:03ID:?????は上から
'0'
''
''
0727717 ◆.Ia5JkzwT6
2007/06/05(火) 22:26:49ID:EQxq7rXdレス有り難う御座います
一行ずつ試してみたいと思います
パーミッションはミスってたらエラーメッセージが表示されますし、session_start()のみだと正常に動作するのでそれは無いと思います
早いですが、今日はもう寝るのでトリップつけておきます
0728nobodyさん
2007/06/05(火) 22:41:18ID:???0729nobodyさん
2007/06/05(火) 22:58:16ID:???$hoge = array();
書かずにいきなり
$hoge[] = 'fuga';
って書くの行儀悪い?
0733nobodyさん
2007/06/05(火) 23:35:20ID:???0734nobodyさん
2007/06/06(水) 00:11:14ID:???他人のソースを見るときでもそれを前提に読むからな
どっちでもいいと思うよ
おれは宣言してから使うけど
0735nobodyさん
2007/06/06(水) 00:23:36ID:???forとかifとかの中で
$hoge[] = 'fuga';
するなら、必ず
$hoge = array();
しておく。
0736nobodyさん
2007/06/06(水) 00:27:49ID:???たぶんDBのFetchループあたりのことだと思うけど、
そういうのわざわざ変数名変えたりしないから
初期化してないってのは怖いね。
0737nobodyさん
2007/06/06(水) 00:48:44ID:???別にPHPがそうとかいう話じゃなくて、プログラミング言語の発展としてさ。
いちいちプログラマの判断で変数宣言を書き込んで管理しなきゃならないなんて、前時代の遺産となるべきものじゃないかしら
0738nobodyさん
2007/06/06(水) 00:52:31ID:???新しく使うのか、どこかから結果を引き継いでいるのかが分からないから
可読性のために俺は書く
0739nobodyさん
2007/06/06(水) 00:54:27ID:???echo $str[1]
---
o
こんな感じに、配列のように文字列から文字を切り出せるって
今日はじめて知ったんだがおまえら知ってましたか?
これ一般常識なの?
0741nobodyさん
2007/06/06(水) 01:21:46ID:???0742nobodyさん
2007/06/06(水) 01:28:32ID:???0748nobodyさん
2007/06/06(水) 01:44:10ID:???変数のスコープを自在にあやつれるほうが高級、というか混乱しなくて良い
んなわけで初期化というか変数宣言(Perlだとmyとかlocalとかな)がないと困るZE☆
0750nobodyさん
2007/06/06(水) 01:55:19ID:???0751nobodyさん
2007/06/06(水) 01:58:00ID:???アップロードできない画像は主にjpgです。
アップロードできるjpgもあります。
ファイルサイズも関係ないようです。
(ファイルサイズが大きめのjpgにもアップロードできるものがあった。逆に小さいjpgだができないものもあった)
昔も同じ症状に陥りましたがたしかphpの設定関係だった気がします。。
いったいどこが原因でしょうか?
■ このスレッドは過去ログ倉庫に格納されています