【PHP】くだらねぇ質問はここに書き込みやがれpart8
>>925 投稿時にファイル名を自動で付すなら
ファイル名だけデータベースで持っておいて
画像は特定のフォルダに放り込むのが簡単。
良し悪しは何で判断する?
927 :
nobodyさん:2005/09/01(木) 08:14:05 ID:eoQpZPGA
普遍性と効率性を聞きたかったんでしょ。
--template.php--
<?=$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鯖の実験用環境では無理ということなのでしょうか。
Winにrmコマンドはない。
>>928 スコープというものが分かってないな。
excuteの中$abcはそこで完結しており、そのままだと外には出られない。
>>930 えと、じゃあやっぱり両対応にするにはopendirとかreaddirを使って
ディレクトリ内のファイルやフォルダを全部調べつつ削除する
ルーチンを作るしかないのですね・・・
>>931 とりあえず、以下な感じで逃げました。
ああ、$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' );
>>933 コンストラクタを用意して、$contentを喰わせるようにしたら?
inculdeについてなんですが例えば以下のようなディレクトリ構造の時
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");
どちらが正しいんでしょう?
>>935 やってみればいいんじゃないでしょうか?
>>935 ワーキングディレクトリ(working directory)つー概念があって、
この場合 index.phpがあるディレクトリがそれに該当する。
includeやrequireで相対指定した場合はそこからの指定になる。
それぞれのファイル中で echo getcwd(); してみればどういう扱いをされるのか分かるよ。
--with-gdオプションで画像に対する処理が出来ますが
文字(フォント)を画像として出力するなんてのは無いですよね?
939 :
235:2005/09/01(木) 16:54:55 ID:???
>>936 そうですよねー、なんかメンドクサかったので。
941 :
938:2005/09/01(木) 17:07:13 ID:???
942 :
nobodyさん:2005/09/01(木) 17:45:59 ID:HGt94pY+
includeで便乗質問。
PHPでファイルを読み込む関数(include require require_once)で絶対パスを使うと
サーバから見たパスになりますよねー。
/usr/ID/public_html/file/
ってな風に。
でも、サイト作ってる時はドメインからみたパスにしたいんですよ。
/file/
ってな風に。
これってどうにか対処法はありますか?
PEARのNet_FTPを使ってリモートサーバでファイル操作をしようとしています。
「リモートにディレクトリがあればそれを削除して、無ければ削除しない」
ということをやりたいのですが、ディレクトリがあるかどうかをチェックする関数が
ありませんでした。
あってもなくても削除するように、
$ftp->rm( 'tmp_dir', TRUE );
としましたが、ディレクトリが無い場合にエラーが発生してしまいます。
(当然といえば当然ですが…)
何かスマートな方法はありますでしょうか?
よろしくお願いします。
>>942 実行時にライブラリのパス変更して、相対パスを使う。
さすがに /file/ は無理だけど、./file/ ならできるのでは。
945 :
943:2005/09/01(木) 19:25:27 ID:???
すいません、自己解決しました。
$ftp->ls( 'tmp_dir' );
の結果が空であれば存在しないという判断で対応できました。
お騒がせしました・・・
セッションの使い方で質問です。
色々例題等試してみて、機能的なことはだいぶ解ったのですが、
フォームで複数の入力画面を行き来する可能性があるようなものの場合、
そこに出てくるセッションで保持したい変数(例:$_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などのような変数に代入した方がいいのでしょうか?
常識的にどうするかって部分が記述されてるサイトを見つけられずちょっと悩んでます。
アドバイスおながいします。
>>946 $_SESSION = array_merge( $_SESSION, $_POST );
POSIX正規表現に関する詳細については、PHP配布ファイルのregexディレクトリに
あるregexのmanページを参照ください。 このページはmanpageフォーマットであり、
読むには man /usr/local/src/regex/regex.7のようにします。
http://jp.php.net/manual/ja/ref.regex.php とありますが、どうやれば読めるのかわかりません。
regex.7の日本語訳などネット上にありませんか?
>>943 $ftp->ls('tmp_dir');
既レスだたた
>>934 こんな感じでしょうか?
これだと、{$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' );
>>953 >>934じゃないけど、ちげーよ!思わずつっこんじゃうよ!
class Edit{
function Edit(){
return $this->execute();
}
function excute(){
return $abc = 'abc';
}
}
-- index.php --
include( 'edit.php' );
$contents = new Edit();
include( 'template.php' );
あ、ごめんコピペして書き直したから関数名間違えてた。
fucntion execute()
ね。まさかexcuteだとは思わなんだ。
PHPでMySQLの操作について聞きたいのですが、
既にデータの入っているTABLEにデータを追加する場合、
1項目が同じデータがあった場合はその行の更新(UPDATE)を、
無い場合は、追加(INSERT)したいのですが出来るでしょうか?
やっぱり一度取得して削除して追加になるんですかね・・・
957 :
946:2005/09/01(木) 23:04:08 ID:???
>>947 ありがとうございます、ヒントになりそう。調べてみます。
ホントに普通はどうするのか?ってとこがわからんです。
その時々で、違う、ってことなのかな?
>>956 PHP関係ないね。
MySQLのテーブルの作り方によるが、replaceはどう?
>>954 それだと、「ほえほえ{$abc}」は何処へ?
なんか頭が煮えくり買って北尾
>>955 (><;;)テラハズカシス
960 :
954:2005/09/01(木) 23:35:16 ID:???
>>959 あのさ、つられてやるけど、
ほんとにわからない?
それにこのクラスのまま使うつもりならとても疑問に思うけどね。
return ’ほげほげ’.$this->execute();
つられ過ぎかなぁ・・・。寝よっと。
あ、PHPのマニュアルってとっっても優秀だと思うから、ちゃんと読んだ方がいいよ。
下手な解説本より役に立つ。
>>953 テンプレートを先に作っておきたいなら、
変数埋め込みじゃなくて、str_replaceでの置き換えを使った方がいいと思う。
>>960 申し訳ないです、本気で質問してます。
ただ、return ’ほげほげ’.$this->execute();と来るとは思ってませんでした。。。
>>961 pukiwikiのソースではstr_replaceとかpreg_replaceとかが大活躍してますね。
実はあまり好きではないのですが、一旦視野を広げて、見直してみる必要がありそうです。。。
>>962 こんなふうに書いてもいいんだけど、
なんだか気持ち悪いんだよなぁ。
--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' );
964 :
nobodyさん:2005/09/02(金) 03:25:11 ID:BIWfF3gY
mb_language('ja');
mb_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!#」
のように一部文字化けしてしまいます。
文字化けさせないようにするにはどうすれば良いのでしょうか
mb_send_mail() を使っているならわざわざjisに変換する必要はないんじゃないかな。
ていうか、iso-2022-jpとjisがなぜ混在しているの? べつにいいけど。
>>965 jisにしないとなぜか文字化けしてしまいます
あっ置き換えが足らなかったみたいです(;´▽`A``
おまいらPear使ってる?
もうperlなんか使う気しねー
>>933 思うのだが、
コンストラクタは
従来はクラス名と同じとしていたが、
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;
}
}
としてる。
>>953 これはどうだろう?
> -- 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' );
動作確認していないのでなんともいえないけど。
971 :
970:2005/09/02(金) 05:11:45 ID: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' );
>>969 俺はまだPHP4ベースだから使ってないけど
PHP5ベースに移行したらどちらも使うつもり。
Delphiをよく使ってるってのもあるが、
意味を明示してるような気がするから。
クラス名と同名の関数がコンストラクタってのは慣習的なものだし、
プロパティを表現するなら__set、__getは良いと思う。
しかしなんつうか宗教臭いな。
>>972 __get __setはDBとかとあわせるとキモチイイ。
>>933でつ。
>>969 自分は数日前にphp5.1rc1を入れたばっかなので、未だphp4の書き方になってます。
コンストラクタはどっちにしようか迷ってます。
自分の愛読しているオブジェクト指向の本に、疎結合の為にアクセッサを…とあったので、
アクセッサは使う方向で逝きたいのですが、マンドクセ('A`)
>>971 index.phpをrequire2つで済ませるなんて、考えなかったですー。
漏れの脳みそテラカタス(><;;)
>>972 宗教なんて言わずに、自らが築いてきた哲学と言いましょう。
自分にレスして頂いた皆様には申し訳ないのですが、
結局edit.phpで使うテンプレート(ほえほえ{$abc})を別ファイルにして、
includeする形にしまいました。
何か有る度にincludeで時間を食うのはどーかなーとは思うのですが、
きもいヒアドキュメントが消えて気分爽快スッキリ清潔なのは否定出来ず。。。
宗教くさくない高級プログラム言語ってそもそもあるんかいな。