【PHP】くだらねぇ質問はここに書き込みやがれpart8
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2005/08/08(月) 01:18:55ID:54u1h4+Dここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
0877nobodyさん
2005/08/31(水) 00:08:42ID:???あの、それなら最初から
$page = 0;
while ($page != 20) { ... }
の方が良いですよ。
0878nobodyさん
2005/08/31(水) 00:15:28ID:???while ($page++ < 20) { ... }
0881nobodyさん
2005/08/31(水) 01:38:45ID:???その時に、要求アドレスによって、表示を分岐させたいと考えてるのですが、
要求アドレスがどうしても取得できません。
これは無理なのでしょうか。
0883881
2005/08/31(水) 02:33:16ID:???セッションを使った方法を考えてみましたが、分かりませんでした。
404を出すアドレスにアクセスした時点では、
何もアクションが起こせないので、セッションも登録できないと思うのですが、
具体的な方法を教えていただけないでしょうか。
0884nobodyさん
2005/08/31(水) 02:58:42ID:???要求アドレスって存在しなかったページって事ですよね?
$_SERVER[REDIRECT_URL] や $_SERVER[REQUEST_URI] で拾えました。
環境:linux/apache2.0.54/PHP5.0.4
0885884
2005/08/31(水) 03:01:26ID:???0886nobodyさん
2005/08/31(水) 03:23:57ID:???「インクリメントした後の$pageが20未満」なのか
「インクリメントしたら20未満の$page」なのか
どっちの意味になるんだろ?
0887881
2005/08/31(水) 03:27:31ID:???要求アドレスは存在しなかったページを意味してます。
ですが、無理みたいですね・・・。
phpでは無理なんでしょうか。
0888nobodyさん
2005/08/31(水) 03:31:59ID:???0890886
2005/08/31(水) 03:36:04ID:???0891881
2005/08/31(水) 03:37:18ID:???.htaccessをどのように使えばいいのでしょうか。
今も.htaccessはありますが、ErrorDocumentの記述があるだけです。
0892884
2005/08/31(水) 03:44:16ID:???あれ?ダメですか?
存在しないページなら>884の通り、$_SERVER[REDIRECT_URL] や $_SERVER[REQUEST_URI] で拾えましたよ。
print "REDIRECT_URL=[".$_SERVER[REDIRECT_URL]."]<br>\n";
print "REQUEST_URI=[".$_SERVER[REQUEST_URI]."]<br>\n";
で存在しないページ(例:http://192.168.0.111/test/ttt.html)が「/test/ttt.html」として取得できました。
SERVER_ADDRやHTTP_HOSTでIPアドレスも取得できるからURLも取得できますし。
ためしに404のエラードキュメントPHPで print_r($_SERVER); してみては?
その前に404のエラードキュメントをPHPで使えるようになっているのでしょうか?
0893881
2005/08/31(水) 03:51:02ID:???REDIRECT_URLは空文字で、
REQUEST_URIの方には404.htmlの方が入ってました。
マニュアルでREQUEST_URIの箇所を読む限りでは確かにこれで取得できそうですが…。
$_SERVERは、print_rで見ましたが、それらしき値はないです。
0894nobodyさん
2005/08/31(水) 03:56:32ID:???ttp://www.php.net/manual/ja/language.operators.increment.php
0895881
2005/08/31(水) 04:00:18ID:???ErrorDocumentの書き方がまずかったようです。
絶対パスを指定したのですが、これを相対パスにすることで直りました。
絶対パスだと、ページ自体のリダイレクトが行われてるんですかね。
丁寧に答えてくださった方、ありがとうございました。
0896nobodyさん
2005/08/31(水) 04:04:38ID:???自前サーバ? レンタルサーバ?
要求アドレスの取得に関係なくPHPファイルがエラードキュメントとして使えるようにしてますよね?
0898nobodyさん
2005/08/31(水) 09:11:56ID:eJmHKqbd$dy=mktime(0,0,0,date("m"),0,date("Y"));
echo date("Y-m-d",$dy);
0899nobodyさん
2005/08/31(水) 10:48:10ID:???0900nobodyさん
2005/08/31(水) 11:42:07ID:???echo date("Y-m-d")でいいじゃん。
0902nobodyさん
2005/08/31(水) 14:01:37ID:???0904nobodyさん
2005/08/31(水) 14:20:31ID:???今オークションを携帯で見れるようなものを作ってます。
まず題名のみを抽出して表示するところまではできました。
題名を押すとリンク先を表示するところで行き詰まってます。
一応できたのですが題名を押すとphp?no=1という所に行きまた詳細を抽出する方法です。
このno=1とうのを20個近く作らなければいけない無駄なやり方でした。
これをもっとスマートにしたいのですが良い方法が思い浮かびません。
何か良い方法があったら教えてほしいです。
説明へたですいません。
0907nobodyさん
2005/08/31(水) 15:05:27ID:???class hoge {
var $test;
function __construct($a, $b) {
$this->test = array($a, $b);
}
function __destruct() {
unset($this->test);
}
}
こんな感じでいいのでしょうか。
0908nobodyさん
2005/08/31(水) 15:13:20ID:???俺も良く判らんけど、__destruct って、そのオブジェクトを解放するときに処理するんじゃないの。
メソッドもオブジェクトに含まれるので、unsetする必要はないかと。
class hoge {
var $test;
function __construct($a, $b) {
$this->test = array($a, $b);
}
function __destruct() {
print_r $this->test;
}
}
$ob = new hoge(1,2);
unset($ob);
0909nobodyさん
2005/08/31(水) 15:18:41ID:???以前、DB接続クラスを作って、
デストラクタにDBをクローズするメソッドを呼び出すようにしたら、
まだクエリすら呼び出しても以内のに勝手に不要とみなされ、
勝手にDB切断されて困ったことがあった。
使い方がいまいち。オブジェクト解放のタイミングを調整できればいいのだが。
0910nobodyさん
2005/08/31(水) 15:20:51ID:???__autoload()関数が役に立ったことがあるという人、いますか?
もし、役にたったならば、どんなときに役に立ちましたか?
require呼び出しでは使えるものでしたか?
0911907
2005/08/31(水) 15:29:11ID:???あ〜なるほどね。
デストラクタってパフォーマンス向上のためにある関数なのかと思ってたんだけど、そうじゃないのか。
>>910
ん〜手間が省けて結構便利だと思うんだけどな。
0912nobodyさん
2005/08/31(水) 17:08:30ID:/SaEXI7Wセーフモード&SAFE_MODE_GIDがoffのレン鯖で
phpスクリプトが書き出したphpファイルにブラウザからアクセス
する技はありまつか?
0914nobodyさん
2005/08/31(水) 17:27:03ID:???0916nobodyさん
2005/08/31(水) 17:36:34ID:???0917nobodyさん
2005/08/31(水) 20:08:29ID:???0918nobodyさん
2005/08/31(水) 20:40:45ID:kcRQHeGxmktime(0,0,0,date("m"),0,date("Y")); # 8-31となって欲しいが7-31になる
「当月末日」の表現で使っていたんですが、これじゃ使えないね
ttp://php.s3.to/man/function.mktime.html
「指定した月の最後の日は次の月の -1 番目の日ではなく、"0" 番目の日として表すことが可能です。」
0919nobodyさん
2005/08/31(水) 20:47:45ID:???0920nobodyさん
2005/08/31(水) 20:50:45ID:???「2005年8月の0番目の日」が「2005年7月の最後の日」になる。
だからmktime(0,0,0,date("m"),0,date("Y"))は「先月末日」の表現にしかならない。
0921nobodyさん
2005/08/31(水) 21:02:22ID:kcRQHeGx勘違いしてたヨ。下記例にもちゃんとあったな。
$lastday = mktime (0,0,0,3,0,2000);
echo strftime ("Last day in Feb 2000 is: %d", $lastday);
0922nobodyさん
2005/08/31(水) 22:19:18ID:N4cNKOEk質問させて下さい
PHPを使ってweb上でメール受信できますか?
http://php.s3.to/net/#popでできてるみたいなんですけど、
内容を変数に扱いたいと思っています。
なにをしたいかというとYahoo!オークションのアラートで送られてくる
メールの画像を一括してみようと思っています。
そういうサイトがあれば一番いいんですけど
だれか作ってくれませんか?
0923nobodyさん
2005/08/31(水) 22:32:34ID:???他力本願というのだよ、それは。
無いなら、自分で調べて作ればいいじゃん。
0925nobodyさん
2005/09/01(木) 02:25:07ID:???DBにいれてかんりしたほうかいい?
0926nobodyさん
2005/09/01(木) 02:36:18ID:???投稿時にファイル名を自動で付すなら
ファイル名だけデータベースで持っておいて
画像は特定のフォルダに放り込むのが簡単。
良し悪しは何で判断する?
0927nobodyさん
2005/09/01(木) 08:14:05ID:eoQpZPGA0928nobodyさん
2005/09/01(木) 13:27:49ID:???<?=$contents?>
--edit.php--
class Edit{
function excute(){
global $contents;
$abc = 'abc';
}
}
$contents=<<<EOL
ほえほえ{$abc}
EOL;
--index.php--
include( 'edit.php' );
$obj = new Edit();
$obj->excute();
include( 'template.php' );
以上のスクリプトで、「ほえほえabc」という出力を得たかったのですが、
実際は「ほえほえ」になってしまいます。
function excuteのなかが著しく怪しいとは思うのですが、
マニュアルhttp://www.php.net/manual/ja/language.variables.scope.phpを
見ても解決の手掛かりが掴めません。。。
何かヒントを頂ければ幸いです。。。
調べたら「実行演算子」とやらで
`rm -Rf $del_dir`;
こう書くように書いてあったのですが、消えません。
実行演算子がシェルに命令を送るだけのものだとすれば、
win鯖の実験用環境では無理ということなのでしょうか。
0930nobodyさん
2005/09/01(木) 13:50:52ID:???0931nobodyさん
2005/09/01(木) 13:53:01ID:???スコープというものが分かってないな。
excuteの中$abcはそこで完結しており、そのままだと外には出られない。
えと、じゃあやっぱり両対応にするにはopendirとかreaddirを使って
ディレクトリ内のファイルやフォルダを全部調べつつ削除する
ルーチンを作るしかないのですね・・・
0933nobodyさん
2005/09/01(木) 15:02:38ID:???とりあえず、以下な感じで逃げました。
ああ、$contents<<<EOLを別の所におきたい。。。
別ファイルにしようかなぁ。。。
--template.php--
<?=$contents?>
--edit.php--
class Edit{
function excute(){
$abc = 'abc';
$contents=<<<EOL
ほえほえ{$abc}
EOL;
return $contents;
}
}
--index.php--
include( 'edit.php' );
$obj = new Edit();
$contents = $obj->excute();
include( 'template.php' );
0935nobodyさん
2005/09/01(木) 15:59:31ID:???index.php
└■A
..├a.inc
..└■B
....└b.inc
index.phpを実行中にA/a.incをinculdeして、さらにB/b.incをinculdeするにはA/a.inc内の記述は
inculde("B/b.inc");
inculde("A/B/b.inc");
どちらが正しいんでしょう?
0937nobodyさん
2005/09/01(木) 16:38:03ID:???ワーキングディレクトリ(working directory)つー概念があって、
この場合 index.phpがあるディレクトリがそれに該当する。
includeやrequireで相対指定した場合はそこからの指定になる。
それぞれのファイル中で echo getcwd(); してみればどういう扱いをされるのか分かるよ。
0938nobodyさん
2005/09/01(木) 16:50:30ID:???文字(フォント)を画像として出力するなんてのは無いですよね?
0941938
2005/09/01(木) 17:07:13ID:???http://ponk.jp/php_gd/index.php?page=1
こことか見るとのってるね
0942nobodyさん
2005/09/01(木) 17:45:59ID:HGt94pY+PHPでファイルを読み込む関数(include require require_once)で絶対パスを使うと
サーバから見たパスになりますよねー。
/usr/ID/public_html/file/
ってな風に。
でも、サイト作ってる時はドメインからみたパスにしたいんですよ。
/file/
ってな風に。
これってどうにか対処法はありますか?
0943nobodyさん
2005/09/01(木) 17:55:33ID:???「リモートにディレクトリがあればそれを削除して、無ければ削除しない」
ということをやりたいのですが、ディレクトリがあるかどうかをチェックする関数が
ありませんでした。
あってもなくても削除するように、
$ftp->rm( 'tmp_dir', TRUE );
としましたが、ディレクトリが無い場合にエラーが発生してしまいます。
(当然といえば当然ですが…)
何かスマートな方法はありますでしょうか?
よろしくお願いします。
0944nobodyさん
2005/09/01(木) 18:26:58ID:???実行時にライブラリのパス変更して、相対パスを使う。
さすがに /file/ は無理だけど、./file/ ならできるのでは。
0945943
2005/09/01(木) 19:25:27ID:???$ftp->ls( 'tmp_dir' );
の結果が空であれば存在しないという判断で対応できました。
お騒がせしました・・・
0946nobodyさん
2005/09/01(木) 19:52:13ID:???色々例題等試してみて、機能的なことはだいぶ解ったのですが、
フォームで複数の入力画面を行き来する可能性があるようなものの場合、
そこに出てくるセッションで保持したい変数(例:$_POST['hoge'])すべてを
例1
if(isset($_POST['hoge1'])){$_SESSION['hoge1'] = $_POST['hoge1'];}
if(isset($_POST['hoge2'])){$_SESSION['hoge2'] = $_POST['hoge2'];}
if(isset($_POST['hoge3'])){$_SESSION['hoge3'] = $_POST['hoge3'];}
続く・・・・
ってセッションに入れないといけないのでしょうか?
if(isset($_POST)){$_SESSION = $_POST;}
じゃ、なんだかうまく逝かなかったです。配列を配列に入れちゃうから無理なのかな?
あと、スクリプトのなかでhtmlに埋め込むときは、セッション変数をどういう風に扱えばよいでしょうか?
自分は{$_POST['nantoka']}って感じで使ってるので、上記「例1」のあとで
if(!isset($_POST['hoge1'])){$_POST['hoge1'] = $_SESSION['hoge1'];}
if(!isset($_POST['hoge2'])){$_POST['hoge2'] = $_SESSION['hoge2'];}
if(!isset($_POST['hoge3'])){$_POST['hoge3'] = $_SESSION['hoge3'];}
続く・・・・
とこれまた面倒なことをしてるんですが。
$_SESSION['hoge1']とか$_POST['hoge1']はそのまま使わずに$hoge1などのような変数に代入した方がいいのでしょうか?
常識的にどうするかって部分が記述されてるサイトを見つけられずちょっと悩んでます。
アドバイスおながいします。
0948nobodyさん
2005/09/01(木) 21:30:30ID:???あるregexのmanページを参照ください。 このページはmanpageフォーマットであり、
読むには man /usr/local/src/regex/regex.7のようにします。
http://jp.php.net/manual/ja/ref.regex.php
とありますが、どうやれば読めるのかわかりません。
regex.7の日本語訳などネット上にありませんか?
0949nobodyさん
2005/09/01(木) 21:46:46ID:???ttp://www.linux.or.jp/JM/html/LDP_man-pages/man7/regex.7.html
0952nobodyさん
2005/09/01(木) 22:40:12ID:???0953nobodyさん
2005/09/01(木) 22:40:49ID:???こんな感じでしょうか?
これだと、{$abc}は置き換えられず、「ほえほえ」だけになってしまうのです。
必ず、<<<EOLの前に$abcを定義しないと逝けないんですよね。
やりたいのは、templateを定義しておいて、excute()でデータを生成して、
templateに埋め込んで、出力する、これだけなんですけどねぇ。。。
やっぱり、別ファイルにしてincludeかなぁ。。。
テンプレートファイルを沢山作りたく無いんだよなぁ。。。
-- template.php --
<?=$contents?>
-- edit.php --
class Edit{
var $template;
function Edit(){
$this->template = <<<EOL
ほえほえ{$abc}
EOL;
}
function excute(){
$abc = 'abc';
return $this->template;
}
}
-- index.php --
include( 'edit.php' );
$obj = new Edit();
$contents = $obj->excute();
include( 'template.php' );
0954nobodyさん
2005/09/01(木) 22:49:41ID:???>>934じゃないけど、ちげーよ!思わずつっこんじゃうよ!
class Edit{
function Edit(){
return $this->execute();
}
function excute(){
return $abc = 'abc';
}
}
-- index.php --
include( 'edit.php' );
$contents = new Edit();
include( 'template.php' );
0955nobodyさん
2005/09/01(木) 22:51:59ID:???fucntion execute()
ね。まさかexcuteだとは思わなんだ。
0956nobodyさん
2005/09/01(木) 22:53:45ID:???既にデータの入っているTABLEにデータを追加する場合、
1項目が同じデータがあった場合はその行の更新(UPDATE)を、
無い場合は、追加(INSERT)したいのですが出来るでしょうか?
やっぱり一度取得して削除して追加になるんですかね・・・
0957946
2005/09/01(木) 23:04:08ID:???ありがとうございます、ヒントになりそう。調べてみます。
ホントに普通はどうするのか?ってとこがわからんです。
その時々で、違う、ってことなのかな?
0959nobodyさん
2005/09/01(木) 23:21:01ID:???それだと、「ほえほえ{$abc}」は何処へ?
なんか頭が煮えくり買って北尾
>>955
(><;;)テラハズカシス
0960954
2005/09/01(木) 23:35:16ID:???あのさ、つられてやるけど、
ほんとにわからない?
それにこのクラスのまま使うつもりならとても疑問に思うけどね。
return ’ほげほげ’.$this->execute();
つられ過ぎかなぁ・・・。寝よっと。
あ、PHPのマニュアルってとっっても優秀だと思うから、ちゃんと読んだ方がいいよ。
下手な解説本より役に立つ。
0961nobodyさん
2005/09/02(金) 00:17:51ID:???テンプレートを先に作っておきたいなら、
変数埋め込みじゃなくて、str_replaceでの置き換えを使った方がいいと思う。
0962nobodyさん
2005/09/02(金) 00:36:30ID:???申し訳ないです、本気で質問してます。
ただ、return ’ほげほげ’.$this->execute();と来るとは思ってませんでした。。。
>>961
pukiwikiのソースではstr_replaceとかpreg_replaceとかが大活躍してますね。
実はあまり好きではないのですが、一旦視野を広げて、見直してみる必要がありそうです。。。
0963nobodyさん
2005/09/02(金) 01:01:31ID:???こんなふうに書いてもいいんだけど、
なんだか気持ち悪いんだよなぁ。
--template.php--
<?=$contents?>
--edit.php--
class Edit{
function excute(){
$abc = 'abc';
return setTemplate($abc);
}
}
function setTemplate($abc){
return <<<EOL
ほえほえ{$abc}
EOL;
}
--index.php--
include( 'edit.php' );
$obj = new Edit();
$contents = $obj->excute();
include( 'template.php' );
0964nobodyさん
2005/09/02(金) 03:25:11ID:BIWfF3gYmb_internal_encoding('EUC-JP');
if(function_exists('mb_send_mail')) {
$to = mb_encode_mimeheader(mb_convert_encoding($nm.'様', 'iso-2022-jp', 'EUC-JP')).' <'.$ma.'>';
$subject = mb_convert_encoding('ご登録ありがとうございます。', 'JIS', 'EUC-JP');
$rcd = mb_send_mail($to, $subject, $body, $header);
}
このようにしてメールを送っているのですが、件名が「Subject: ご登録ありがとうご$6$$$^$9!#」
のように一部文字化けしてしまいます。
文字化けさせないようにするにはどうすれば良いのでしょうか
0965nobodyさん
2005/09/02(金) 03:43:33ID:???ていうか、iso-2022-jpとjisがなぜ混在しているの? べつにいいけど。
0967nobodyさん
2005/09/02(金) 04:26:07ID:???0968nobodyさん
2005/09/02(金) 04:31:07ID:???0969nobodyさん
2005/09/02(金) 04:47:56ID:???思うのだが、
コンストラクタは
従来はクラス名と同じとしていたが、
PHP5になってから__constract()という関数が加わり、これをオーバライドするような
形で自作クラスに定義して使えるが、
クラス名と同じよりも、こっちの新しい__constract()を使ったほうがいいのだろうか?
それから__get(), __set()なんてものも、まるで、C#のプロパティそっくりだが。
使うべきなのだろうか?
JavaBeansの影響を受けて、いつも何も考えず、
class Bean {
private ClassName className;
public function getClassName(){
return $this->className;
}
public function setClassName(ClassName $className){
$this->className = $className;
}
}
としてる。
0970nobodyさん
2005/09/02(金) 04:56:56ID:???これはどうだろう?
> -- template.php --
<?
$edit = new Edit('abc');
$contents = $edit->execute()
?>
> <?=$contents?>
> -- edit.php --
> class Edit{
> private $template;
> public function __constract($abc){
> $this->template = <<<EOL
> ほえほえ{$abc}
> EOL;
> }
> pulic function excute(){
> return $this->template;
> }
> }
> -- index.php --
> include( 'edit.php' );
> include( 'template.php' );
動作確認していないのでなんともいえないけど。
0971970
2005/09/02(金) 05:11:45ID:phrYpD5oあと、これはPHP5で動作確認した。
-- template.php --
<?php
$edit = new Edit('abc');
$contents = $edit->execute();
?>
<?=$contents?>
-- edit.php --
<?php
class Edit {
private $template;
public function __construct($abc) {
$this->template =<<<EOL
ほえほえ{$abc}
EOL;
}
public function execute() {
return $this->template;
}
}
-- index.php --
require_once( 'edit.php' );
require_once( 'template.php' );
0972nobodyさん
2005/09/02(金) 06:34:02ID:???俺はまだPHP4ベースだから使ってないけど
PHP5ベースに移行したらどちらも使うつもり。
Delphiをよく使ってるってのもあるが、
意味を明示してるような気がするから。
クラス名と同名の関数がコンストラクタってのは慣習的なものだし、
プロパティを表現するなら__set、__getは良いと思う。
しかしなんつうか宗教臭いな。
0974nobodyさん
2005/09/02(金) 08:42:51ID:???>>969
自分は数日前にphp5.1rc1を入れたばっかなので、未だphp4の書き方になってます。
コンストラクタはどっちにしようか迷ってます。
自分の愛読しているオブジェクト指向の本に、疎結合の為にアクセッサを…とあったので、
アクセッサは使う方向で逝きたいのですが、マンドクセ('A`)
>>971
index.phpをrequire2つで済ませるなんて、考えなかったですー。
漏れの脳みそテラカタス(><;;)
>>972
宗教なんて言わずに、自らが築いてきた哲学と言いましょう。
自分にレスして頂いた皆様には申し訳ないのですが、
結局edit.phpで使うテンプレート(ほえほえ{$abc})を別ファイルにして、
includeする形にしまいました。
何か有る度にincludeで時間を食うのはどーかなーとは思うのですが、
きもいヒアドキュメントが消えて気分爽快スッキリ清潔なのは否定出来ず。。。
0975nobodyさん
2005/09/02(金) 08:45:47ID:???0976nobodyさん
2005/09/02(金) 09:39:42ID:???可読性が上がるくらい?
レス数が950を超えています。1000を超えると書き込みができなくなります。