【PHP】くだらねぇ質問はここに書き込みやがれpart8

このエントリーをはてなブックマークに追加
926nobodyさん:2005/09/01(木) 02:36:18 ID:???
>>925
投稿時にファイル名を自動で付すなら
ファイル名だけデータベースで持っておいて
画像は特定のフォルダに放り込むのが簡単。

良し悪しは何で判断する?
927nobodyさん:2005/09/01(木) 08:14:05 ID:eoQpZPGA
普遍性と効率性を聞きたかったんでしょ。
928nobodyさん:2005/09/01(木) 13:27:49 ID:???
--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を
見ても解決の手掛かりが掴めません。。。
何かヒントを頂ければ幸いです。。。
929 ◆SyMIZYHImA :2005/09/01(木) 13:42:40 ID:???
中身入りのディレクトリを問答無用で削除するにはどうしたらいいのでしょうか。

調べたら「実行演算子」とやらで
`rm -Rf $del_dir`;
こう書くように書いてあったのですが、消えません。

実行演算子がシェルに命令を送るだけのものだとすれば、
win鯖の実験用環境では無理ということなのでしょうか。
930nobodyさん:2005/09/01(木) 13:50:52 ID:???
Winにrmコマンドはない。
931nobodyさん:2005/09/01(木) 13:53:01 ID:???
>>928
スコープというものが分かってないな。
excuteの中$abcはそこで完結しており、そのままだと外には出られない。
932 ◆SyMIZYHImA :2005/09/01(木) 14:04:38 ID:???
>>930
えと、じゃあやっぱり両対応にするにはopendirとかreaddirを使って
ディレクトリ内のファイルやフォルダを全部調べつつ削除する
ルーチンを作るしかないのですね・・・
933nobodyさん:2005/09/01(木) 15:02:38 ID:???
>>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' );
934nobodyさん:2005/09/01(木) 15:12:34 ID:???
>>933
コンストラクタを用意して、$contentを喰わせるようにしたら?
935nobodyさん:2005/09/01(木) 15:59:31 ID:???
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");
どちらが正しいんでしょう?
936nobodyさん:2005/09/01(木) 16:20:33 ID:???
>>935
やってみればいいんじゃないでしょうか?
937nobodyさん:2005/09/01(木) 16:38:03 ID:???
>>935
ワーキングディレクトリ(working directory)つー概念があって、
この場合 index.phpがあるディレクトリがそれに該当する。
includeやrequireで相対指定した場合はそこからの指定になる。
それぞれのファイル中で echo getcwd(); してみればどういう扱いをされるのか分かるよ。
938nobodyさん:2005/09/01(木) 16:50:30 ID:???
--with-gdオプションで画像に対する処理が出来ますが
文字(フォント)を画像として出力するなんてのは無いですよね?
939235:2005/09/01(木) 16:54:55 ID:???
>>936
そうですよねー、なんかメンドクサかったので。
940nobodyさん:2005/09/01(木) 16:55:50 ID:???
>>938
とりあえずgdのマニュアル嫁
941938:2005/09/01(木) 17:07:13 ID:???
>>938
http://ponk.jp/php_gd/index.php?page=1
こことか見るとのってるね
942nobodyさん:2005/09/01(木) 17:45:59 ID:HGt94pY+
includeで便乗質問。

PHPでファイルを読み込む関数(include require require_once)で絶対パスを使うと
サーバから見たパスになりますよねー。

/usr/ID/public_html/file/

ってな風に。
でも、サイト作ってる時はドメインからみたパスにしたいんですよ。

/file/

ってな風に。
これってどうにか対処法はありますか?
943nobodyさん:2005/09/01(木) 17:55:33 ID:???
PEARのNet_FTPを使ってリモートサーバでファイル操作をしようとしています。
「リモートにディレクトリがあればそれを削除して、無ければ削除しない」
ということをやりたいのですが、ディレクトリがあるかどうかをチェックする関数が
ありませんでした。

あってもなくても削除するように、
$ftp->rm( 'tmp_dir', TRUE );
としましたが、ディレクトリが無い場合にエラーが発生してしまいます。
(当然といえば当然ですが…)

何かスマートな方法はありますでしょうか?
よろしくお願いします。
944nobodyさん:2005/09/01(木) 18:26:58 ID:???
>>942
実行時にライブラリのパス変更して、相対パスを使う。
さすがに /file/ は無理だけど、./file/ ならできるのでは。
945943:2005/09/01(木) 19:25:27 ID:???
すいません、自己解決しました。

$ftp->ls( 'tmp_dir' );
の結果が空であれば存在しないという判断で対応できました。
お騒がせしました・・・
946nobodyさん:2005/09/01(木) 19:52:13 ID:???
セッションの使い方で質問です。
色々例題等試してみて、機能的なことはだいぶ解ったのですが、
フォームで複数の入力画面を行き来する可能性があるようなものの場合、
そこに出てくるセッションで保持したい変数(例:$_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などのような変数に代入した方がいいのでしょうか?
常識的にどうするかって部分が記述されてるサイトを見つけられずちょっと悩んでます。
アドバイスおながいします。
947nobodyさん:2005/09/01(木) 19:55:01 ID:???
>>946

$_SESSION = array_merge( $_SESSION, $_POST );
948nobodyさん:2005/09/01(木) 21:30:30 ID:???
POSIX正規表現に関する詳細については、PHP配布ファイルのregexディレクトリに
あるregexのmanページを参照ください。 このページはmanpageフォーマットであり、
読むには man /usr/local/src/regex/regex.7のようにします。

http://jp.php.net/manual/ja/ref.regex.php

とありますが、どうやれば読めるのかわかりません。
regex.7の日本語訳などネット上にありませんか?
949nobodyさん:2005/09/01(木) 21:46:46 ID:???
950nobodyさん:2005/09/01(木) 21:49:24 ID:???
>>949
即レスどうもです。
951nobodyさん:2005/09/01(木) 22:39:25 ID:???
>>943
$ftp->ls('tmp_dir');

952nobodyさん:2005/09/01(木) 22:40:12 ID:???
既レスだたた
953nobodyさん:2005/09/01(木) 22:40:49 ID:???
>>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' );
954nobodyさん:2005/09/01(木) 22:49:41 ID:???
>>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' );
955nobodyさん:2005/09/01(木) 22:51:59 ID:???
あ、ごめんコピペして書き直したから関数名間違えてた。
fucntion execute()
ね。まさかexcuteだとは思わなんだ。
956nobodyさん:2005/09/01(木) 22:53:45 ID:???
PHPでMySQLの操作について聞きたいのですが、
既にデータの入っているTABLEにデータを追加する場合、
1項目が同じデータがあった場合はその行の更新(UPDATE)を、
無い場合は、追加(INSERT)したいのですが出来るでしょうか?
やっぱり一度取得して削除して追加になるんですかね・・・
957946:2005/09/01(木) 23:04:08 ID:???
>>947
ありがとうございます、ヒントになりそう。調べてみます。
ホントに普通はどうするのか?ってとこがわからんです。
その時々で、違う、ってことなのかな?
958nobodyさん:2005/09/01(木) 23:04:42 ID:???
>>956
PHP関係ないね。
MySQLのテーブルの作り方によるが、replaceはどう?
959nobodyさん:2005/09/01(木) 23:21:01 ID:???
>>954
それだと、「ほえほえ{$abc}」は何処へ?
なんか頭が煮えくり買って北尾
>>955
(><;;)テラハズカシス
960954:2005/09/01(木) 23:35:16 ID:???
>>959
あのさ、つられてやるけど、
ほんとにわからない?
それにこのクラスのまま使うつもりならとても疑問に思うけどね。
return ’ほげほげ’.$this->execute();
つられ過ぎかなぁ・・・。寝よっと。
あ、PHPのマニュアルってとっっても優秀だと思うから、ちゃんと読んだ方がいいよ。
下手な解説本より役に立つ。
961nobodyさん:2005/09/02(金) 00:17:51 ID:???
>>953
テンプレートを先に作っておきたいなら、
変数埋め込みじゃなくて、str_replaceでの置き換えを使った方がいいと思う。
962nobodyさん:2005/09/02(金) 00:36:30 ID:???
>>960
申し訳ないです、本気で質問してます。
ただ、return ’ほげほげ’.$this->execute();と来るとは思ってませんでした。。。

>>961
pukiwikiのソースではstr_replaceとかpreg_replaceとかが大活躍してますね。
実はあまり好きではないのですが、一旦視野を広げて、見直してみる必要がありそうです。。。
963nobodyさん:2005/09/02(金) 01:01:31 ID:???
>>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' );
964nobodyさん: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!#」
のように一部文字化けしてしまいます。
文字化けさせないようにするにはどうすれば良いのでしょうか
965nobodyさん:2005/09/02(金) 03:43:33 ID:???
mb_send_mail() を使っているならわざわざjisに変換する必要はないんじゃないかな。
ていうか、iso-2022-jpとjisがなぜ混在しているの? べつにいいけど。
966nobodyさん:2005/09/02(金) 03:51:49 ID:???
>>965
jisにしないとなぜか文字化けしてしまいます
あっ置き換えが足らなかったみたいです(;´▽`A``
967nobodyさん:2005/09/02(金) 04:26:07 ID:???
おまいらPear使ってる?
968nobodyさん:2005/09/02(金) 04:31:07 ID:???
もうperlなんか使う気しねー
969nobodyさん:2005/09/02(金) 04:47:56 ID:???
>>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;
 }
}
としてる。

970nobodyさん:2005/09/02(金) 04:56:56 ID:???
>>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' );

動作確認していないのでなんともいえないけど。
971970: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' );
972nobodyさん:2005/09/02(金) 06:34:02 ID:???
>>969
俺はまだPHP4ベースだから使ってないけど
PHP5ベースに移行したらどちらも使うつもり。
Delphiをよく使ってるってのもあるが、
意味を明示してるような気がするから。

クラス名と同名の関数がコンストラクタってのは慣習的なものだし、
プロパティを表現するなら__set、__getは良いと思う。

しかしなんつうか宗教臭いな。
973nobodyさん:2005/09/02(金) 08:30:25 ID:???
>>972
__get __setはDBとかとあわせるとキモチイイ。
974nobodyさん:2005/09/02(金) 08:42:51 ID:???
>>933でつ。

>>969
自分は数日前にphp5.1rc1を入れたばっかなので、未だphp4の書き方になってます。
コンストラクタはどっちにしようか迷ってます。
自分の愛読しているオブジェクト指向の本に、疎結合の為にアクセッサを…とあったので、
アクセッサは使う方向で逝きたいのですが、マンドクセ('A`)

>>971
index.phpをrequire2つで済ませるなんて、考えなかったですー。
漏れの脳みそテラカタス(><;;)

>>972
宗教なんて言わずに、自らが築いてきた哲学と言いましょう。

自分にレスして頂いた皆様には申し訳ないのですが、
結局edit.phpで使うテンプレート(ほえほえ{$abc})を別ファイルにして、
includeする形にしまいました。
何か有る度にincludeで時間を食うのはどーかなーとは思うのですが、
きもいヒアドキュメントが消えて気分爽快スッキリ清潔なのは否定出来ず。。。
975nobodyさん
宗教くさくない高級プログラム言語ってそもそもあるんかいな。