トップページ⇒php
1001コメント344KB

【PHP】質問スレッド Part5

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/09/11 14:15ID:FWA0CpdU
レスは気長に待つのが良い感じかも。


■本家
http://www.php.net/

■日本 PHP ユーザ会
http://www.php.gr.jp/

■PHP マニュアル
http://www.php.net/manual/ja/

■PEAR マニュアル
http://pear.php.net/manual/ja/


過去スレ, 関連スレ及び注意事項等は、
>>2-10あたりにきっと誰かが……。
0367hmk02/10/07 20:33ID:???
>>366
板違いで申し訳ないが、ちなみに儂は、
http://***/xyz へのアクセスを http://***/index.php?code=xyz
と読み替えさせるためにrewrite使ったことがあります。
0368荒川太郎02/10/07 20:38ID:bKtEI8Ri
>>367

 どもです、この辺の話は、ここだとまずかったかな?
 apache関連の板ってあるのかな?
0369nobodyさん02/10/08 02:52ID:mDZCCxjW
>>321
imagemagickってーの使えばできるぽ
外部コマンド使うか、pearのPECLぱっけじいんすとしれ
0370nobodyさん02/10/09 01:22ID:Cmd2yG94
クッキーを2chみたいにJavaScriptで取得できないかな?
perlでは簡単に出来るんだけど、phpのsetcookie()を使うとJavaScriptで取得したときに
文字が化けちゃうよ。
setcookie()を使わずに、書き込みもJavaScriptを使えば良いんだろうけど、
なるべくならphpを使いたいな。
どなたか良い方法を知っている方いませんか?
0371nobodyさん02/10/09 02:49ID:uMeBQ3Ig
なんで文字化けするのか考えたら?
0372nobodyさん02/10/09 08:19ID:???
>>370
Netscape7はunescapeが対応しているのでNetscape専用にしる。
ていうか俺も困っています。
0373nobodyさん02/10/09 11:26ID:???
>>19 の答えがわからないんだけど、ぜひ教えてください。
お願いします。。。
0374nobodyさん02/10/09 11:29ID:???
>>373
粘るね、あんた……。
関連の ML には投げてみたの?
0375hmk02/10/09 13:29ID:???
>>370
文字化けしないコードに変換してからsetcookie()すればいいだけでしょ、たぶん。

>>373
>>19の説明だけだと、PHP+PEAR+Accessについてよく知っている人でないと答えにくいと思う。
答える側の手を煩わせないように、前後のコードやデータとあわせて、�@期待したい結果�A実際の結果�Bエラー等が出力された場合はその出力
を簡潔に書くべきだと思う。
0376nobodyさん02/10/09 15:10ID:???
>>375
ですな。
冒頭にMSAccessとある時点でほとんどの人にあぼーんされているのではなかろうか。(w
0377あくせる02/10/09 16:21ID:DrstWiBS
>>375
ですよね。
なんで、insert するときわざわざ $nowdate かわかんない。

テーブルこしらえるときに date TIMESTAMP DEFAULT CURRENT_TIMESTAMP とか。

Access なら「規定値」にDate()じゃだめなの?
0378nobodyさん02/10/09 19:40ID:???
>>375
全然スレ違いなんだが、あんたのレスj-phoneの携帯から見ると絵文字が(w

スレ汚しすまそ
0379nobodyさん02/10/10 10:48ID:???
MLで解答がいただけなかったので、こちらで質問させてください。
セッションについて質問があるのでよろしくお願いします。

記述1(session_start()を記述してない)
−−−test.php−−−
/* クラス定義 */
$sel2 = new クラス名;
/* 読み込んだクラスをセッション管理 */
session_register("sel2");
$sel2->クラス名($sql);

−−−クラス内−−−
$this->usersql = $sql;

だいぶ省略してますが上記記述だと、クラス内の
$this->usersql という変数はリロードしても引き継がれてるのですが

記述2(session_start()を記述してない)※上記とは違うソース(PHPマニュアルより抜粋)
if (!session_is_registered('count')) {
session_register('count');
$count = 1;
}
else {
$count++;
}
?>こんにちは、あなたがこのページに来たのは<?php echo $count;?>回目ですね。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
上記記述でリロードした場合、カウントアップしていってくれません。
session_start()を記述すればカウントアップするのですが、
ならばなぜ、session_start()の記述がない”記述1”は情報を保持しているのかが理解できません。何故session_register()だけでセッションが成立する
場合があるのか、、すみませんがご教授ください。
0380nobodyさん02/10/10 12:37ID:???
>>379
良く分からんが、session_is_registered()のあたりで、
内部でいろいろやってそうだ…

便乗して質問。
$_SESSIONを開放しようとしてunset($_SESSION)した後、
$_SESSION['hogehoge']に何か値を代入すると、
値が保存されないんだけど、これって仕様?
どうやら、unset($_SESSION)すると、
その後のセッションに関する操作が全て無効になるみたいだけど。

http://www.php.net/manual/ja/function.session-unset.php
これ見る限り、$_SESSION = array();と等価であるように書かれているけど…
0381nobodyさん02/10/10 19:06ID:???
>>379
セッション変数に登録しようとすると、暗黙のうちにsession_start()を
まだ呼び出していなかったら呼び出します。
ML過去ログにも同様のネタはあるよ。2年近く前だったかなー。

0382nobodyさん02/10/11 04:39ID:Dj1Sz5F3
テンプレートにsmartyを使っていますが、
<style type="text/css">
<!--
.hide { display:none }
-->
</style>
のようなスタイルシートがテンプレート内にあると
Warning: Smarty: [in hoge.html line 13]: syntax error: unknown tag - 'display:none' in /usr/local/lib/php/Smarty_Compiler.class.php on line 1182

のようにWarningが出てしまいます。
回避する方法はありませんでしょうか。

よろしくお願いします。
038338202/10/11 05:24ID:???
↑ですが自己解決しました。
{literal}
{/literal}
で囲んでおけばよかったんですね。

しかし、SmartyってWYSIWYG環境でHTML作ること考えてないのかな?
0384age02/10/11 13:13ID:???
PerlとPHPって負荷率ってどれくらい違うのですか?
例)サーバに画像掲示板100個設置
0385nobodyさん02/10/11 15:40ID:???
設置しても負荷は掛かりませんが。
0386nobodyさん02/10/11 15:56ID:???
どう考えても組んだ人次第
0387nobody02/10/11 23:07ID:???
他の画面へ移動する方法を教えてください。

現在、<A href=〜>で、自分自身(php)を呼び出し、色々チェックをして、オッケーであれば
別の画面へリンクしたいのですが、チェック後オッケーであれば、header("Location: http=hogehoge")で、
別画面へ移動しています。

しかし、クライアントから「新規にウィンドウをオープンして表示して欲しい」とリクエストがあり、
困っています。
どうすれば、実現可能でしょうか?

0388 ◆Kiss.FX29M 02/10/11 23:30ID:???
>>387
新規ウィンドウを開くにはJavaScriptを使うのだが、チェックしてダメな場合は
新規ウィンドウを開かずに元のウィンドウで修正させたいわけですな。
元のウィンドウに隠しフレームを作っておいて、リンク先をとりあえず隠し
フレームしておく。そこでチェックしてOKなら隠しフレームからJavaScriptで
新規ウィンドウを開く。ダメなら元のウィンドウへ修正画面を出す。
で、どうよ。
038938702/10/11 23:41ID:???
>>388
レスありがとうございます。

>チェックしてダメな場合は新規ウィンドウを開かずに元のウィンドウで修正させたいわけですな。

そうです、そうです。

やはりJavaScriptを使わないと無理でしょうか?
<A href=hogehoge target="_brank">のように、簡単にphpでチェック後自動的に
移動したいのです。

クライアントの要望では「なるべくJavaScriptを多用しない」とあるのです。
(フォームの入力チェックくらい)
なので、悩んでいます。
なにか、名案がありましたらご指導ください。
0390 ◆Kiss.FX29M 02/10/12 00:21ID:???
>>389
JavaScriptの多用はダメって何でかな?
一切ダメってなら理解できないわけでもないのだが...

で、<A href=hogehoge target="_brank"> こうするとダメな場合でも
新規ウィンドウを開いちゃうわけだが、『入力に間違いがあるので、
修正してください』ってなメッセージを表示して元ウィンドウでの修正を
促すようにするとか...
クライアントの意向も含めて内容がわからないので、これ以上は
なんともだな。
0391nobodyさん02/10/12 00:43ID:RgMaTiub
<A href=hogehoge?check=ok target="_brank">
とかして、開く先でチェックする。

チェック不通過なら、
header("Location: http=motopage?check=out")
で送り返す。
ってのは?
不通過の場合新しいページは開いたまま元のページを表示しちゃうけどね。
0392nobodyさん02/10/12 01:41ID:???
どう考えてもページ遷移の設計に問題あるだろ。
といいたい気持ちを抑えつつ、ひとつ案を出してみます。

<? if( $checkresult == "ok" ){ ?>
<body onLoad="window.open('thisfile.html')">
<? } else { ?>
<body>
<? } ?>

039338902/10/12 02:08ID:???
レス頂いた皆さん、色々ありがとうございました。
結局、392さんの案を使わせていただきました。

>どう考えてもページ遷移の設計に問題あるだろ。

そうですね〜。
388さんの案でもいいのですが、「そこまでするのもな〜〜」っていう感じのものなのです。

とりあえず、実現できました。ありがとうございました。
0394 ◆Kiss.FX29M 02/10/12 10:32ID:???
>>392
おっ! なるほどぉ。
ワシも勉強になった。
0395( ´ー`)y-~~ ◆f7mhnEfPcU 02/10/13 02:59ID:5MS6fmVa
PHPさわり記念age
0396nana02/10/14 11:29ID:???
済みません。配列の事でお聞きしたいのですが、

$line = "出席番号<>1<>名前<>安藤<>科目<>数学<>点数<>85"

こういった内容の文字列があり、これから下のような配列を
作りたいと思っています。

$array("出席番号" => 1,
     "名前"    => "安藤",
     "科目"    => "数学",
     "点数"    => 85);

試行錯誤して一つ方法が見つかったのですが、何だか
とても回りくどい、下手な書き方をしているようです。。

もし効率的な方法があれば、教えてください。

<?php
  $line = "出席番号<>1<>名前<>安藤<>科目<>数学<>点数<>85";
  $data = explode('<>', $line);
  while($data) {
    $name    = array_shift($data);
    $value    = array_shift($data);
    $array_tmp = array($name => $value);
    $array    = array_merge($array, $array_tmp);
  }
?>

よろしくしくお願いします。
0397nobodyさん02/10/14 11:46ID:???
あんまりいいのが思い浮かばなかった

$data = split("<>", $line);
for ($i = 0, $cnt = count($data); $i < $cnt; $++) {
$array[$data[$i]] = $data[$i + 1];
}

0398nana02/10/14 11:52ID:???
>>397 さん、休日なのに素早い回答ありがとうございます!
さっそく使わせていただきます。ありがとうございました。
0399 ◆Kiss.FX29M 02/10/14 12:06ID:???
>>396
その前にそんな配列を作って後で苦労しねぇか。
0400nana02/10/14 13:05ID:???
>>399 さん、実は複数の先生から先のような、こちらが
想定していないフォーマットでテキストファイルを
受け取ってしまって、これをデータベースに登録して
いかなくてはならないんです。。

しかもテキストファイルの中身の「順序」が下記のように
まちまちなので、行単位で読み込みながら連想配列に
しておけば、データベースに登録していく際に間違いが
減るのでは、と思ったのですが…考え方が間違ってますでしょうか??

ファイル1: 出席番号<>1<>名前<>安藤<>科目<>数学<>点数<>85
ファイル2: 名前<>伊藤<>出席番号<>2<>科目<>数学<>点数<>65
0401 ◆Kiss.FX29M 02/10/14 13:33ID:???
>>400
科目は数学だけではないだろうから、配列の次元を増やすか、
配列変数そのもを増やすかしないと...と思ったわけよ。
最終集計をデータベースでやるので仮だ! ってなら別にいいけどよ。

0402nana02/10/14 13:40ID:???
>>401 さん、ご助言ありがとうございます。
仰るとおり、集計などはデータベースに登録してから
行うつもりでした…お気遣いありがとうございました。
0403nobodyさん02/10/14 14:40ID:c/k9cDX2
PerlからPHPに流れてきて、痒いところに手が届くような思いなのですが、
セッションというのがいまいちよく分かりません。
セッション変数は、サーバー側に保持しているんですよね?
だとしたら、長い間運用していたら
サーバー側のリソースがいっぱいになってしまわないのでしょうか?
ブラウザが閉じられたらセッションも終了する、と解説書に書いてありますが、
クライアント側がハングアップした場合等でもうまく処理されるのでしょうか?
0404nobodyさん02/10/14 14:48ID:???
RedHat 8.0 で、apache-2.0、PHP-4.2.2、postgresql-7.2.2 を
インストールしています。 以下を教えて下さい。

ローカルな環境で REMOTE_ADDR を取得したいのですが、
<?php
 print "remote_addr=".getenv("REMOTE_ADDR"). "<br>";
?>
では getenv 部分が空白になってしまいます。

phpinfo() では _SERVER["REMOTE_ADDR"] に正常な IP が表示されています。
php.ini は変更していません。
0405nobodyさん02/10/14 15:10ID:???
>>404
ん?どうゆうこと?普通こうじゃないの?
<?
$remote_addr = getenv("REMOTE_ADDR");
print "remote_addr=".$remote_addr. "<br>";
?>
0406 02/10/14 15:16ID:qwp05sUr
$line = "出席番号<><>名前<>安藤<>科目<>数学<>点数<>85";

preg_match_all('/[^<>]+<>[^<>]*/', $line, $match);

$sets = current($match);

foreach($sets as $set) {
list($key, $val) = explode('<>', $set);
$array[$key] = $val;
}

-----
ガーベッジ・ コレクションで掃除します
session.gc_maxlifetime

-----
"remote_addr={$_SERVER['REMOTE_ADDR']}"
0407nobodyさん02/10/14 15:18ID:IjGAaSWb
getenv()
注意 この関数は、ISAPIモードでは動作しません

<?=$_SERVER["REMOTE_ADDR"]?>
040840502/10/14 15:19ID:???
>>406 勉強になりまつ
0409404 NotFound02/10/14 15:24ID:???
>>405-407
たくさんありがとうございます。
print "remote_addr=" .$_SERVER['REMOTE_ADDR']."<br>";
で表示はされました。

ISAPIモード...ですか... 検索してみます。
041040302/10/14 16:07ID:???
>406

なるほどー。時間制限があるわけですね。
ありがとうございました。
0411nobodyさん02/10/14 16:19ID:x52xQDqk
>>407
どのバージョンからそうなったんだ?
以前は機能していたのに。
確認したら確かにCGIモードでしか値を返さないな。
0412nana02/10/14 18:33ID:???
>>406 さん、ありがとうございます。
正規表現は難しいので殆ど使ったことがないのですが、
書いていただいた意味を調べて理解したいと思います。
ご親切にありがとうございました。
0413nobodyさん02/10/14 19:55ID:H8/ENmxF
php4 win2k

echo readfile(filename);

すると、filenameの内容となぜかバイト数が表示されるのですが、
これを抑制するにはどうしたらいいですか。

例
file.txt
ああああああああああ

echo readfile("file.txt");

結果
ああああああああああ
20
0414nobodyさん02/10/14 20:00ID:???
>>413 readfile のマニュアル読め。
この関数、名前が悪いよな。
0415nobodyさん02/10/14 20:11ID:H8/ENmxF
>>414
Returns the number of bytes read from the file
あじやー
素直にfgets デモ使います。
定型html部分をインクルード(バックスラッシュなし)しようと思ったのだが、
0416hmk02/10/14 20:48ID:r0BZ2PpZ
>>416
インクルードしたいのならinclude()すれば?
0417 02/10/15 02:00ID:???
>>415
readfile ファイルを出力してバイト数を返す
http://jp.php.net/manual/ja/function.readfile.php

readfile(filename);
だけにして戻り値は捨てる

>>416のように include,include_once,require,require_once
あたりの方がいいのでは、

Zendに評価して欲しくない部分でも含まれてない限り。
0418nobodyさん02/10/15 11:12ID:YHFkhAWR
ひとつ質問させてください。(鯖はPHP4.2.2、使用PCはWinXP)
テキスト検索付きのBBSをファイルベースで作ってるのですが、
検索語に「ー(長音)」が含まれる場合にエラーが発生します。
  Warning: REG_EBRACK in xxx.inc on line 181
 当該ファイルの181行目の処理:
  $result = eregi($keyword,$res);
BBSログ内容を含む変数$resに対して、
検索語を含む変数$keywordで検索をかけているわけですが、
「ー(長音)」にぶつかると、REG_EBRACK([]ブラケットが閉じてない)
エラーが出てしまうようです。

いろいろ検索してみた結果、
SJISの長音がまずい文字を含んでるようなのですが、
正規表現はまったくの素人(PHPもですが…)なので
うまい処理の仕方が分かりません。
どなたか教えていただけないでしょうか。

※eregを使わないやり方があればそれでもOKです。
 ちなみに、PHPの内部エンコーディングはSJISです。
0419nobodyさん02/10/15 12:08ID:???
>>418
http://www.php.net/manual/ja/ref.mbstring.php
0420nobodyさん02/10/15 12:53ID:???
>>418
mb関数を使うのも良いが、EUC文字コードを使うのが基本
0421s02/10/15 13:02ID:MW777drM
IDE何使ってる?
0422nobodyさん02/10/15 17:15ID:60o/Yyha
変数は、$_GET["hoge"]で受け取った方が良いと聞いたのですが何故ですか?
$hogeで受け取るのと何が違うの?
0423nobodyさん02/10/15 17:49ID:???
>>422
荒らしですか?
0424nobodyさん02/10/15 18:01ID:???
>>422
「変数は、$_GET["hoge"]で受け取った方が良い」
とあなたに言った方に聞きなさい。
042541802/10/15 18:50ID:???
>>419-420 レスありがとうございました。

eregi()で検索する方法をやめて、
mb_strpos()を使うようにしたらうまくいきました…
0426nobodyさん02/10/15 18:54ID:MbJ1xrNT
http://www.midgard-project.org/
だれかこれ使ってる人居ない?
0427nobodyさん02/10/16 02:07ID:???
いま動いてるphpファイルのファイル名ってとれないですか?

iamview.php
<html><head></head><body>
<?php
echo "I am View<br>\n";
echo "PHP_SELF = ".$_SERVER[PHP_SELF]."<br>\n";
include "iambean.php";
$iambean = new iambean;
?>
</body></html>

iambean.php
<?php
class iambean{
function iambean(){
echo "I am Bean<br>\n";
echo "PHP_SELF = ".$_SERVER[PHP_SELF]."<br>\n";
}
}
?>

結果
I am View
PHP_SELF = /php/iamview.php
I am Bean
PHP_SELF = /php/iamview.php

2個目はiambean.phpになってほすぃ
0428nobodyさん02/10/16 02:21ID:???
>427
__FILE__は?
0429nobodyさん02/10/16 02:37ID:???
<?php
class iambean{
function iambean(){
echo "I am Bean<br>\n";
echo "PHP_SELF = ".$_SERVER[PHP_SELF]."<br>\n";
echo "SCRIPT_FILENAME = ".$_SERVER[SCRIPT_FILENAME]."<br>\n";
echo "PATH_TRANSLATED = ".$_SERVER[PATH_TRANSLATED]."<br>\n";
echo "SCRIPT_NAME = ".$_SERVER[SCRIPT_NAME]."<br>\n";
echo "__FILE__ = ".__FILE__."<br>\n";
}
}
?>
結果
I am View
PHP_SELF = /php/iamview.php
SCRIPT_FILENAME = c:/program files/apache group/apache/htdocs/php/iamview.php
I am Bean
PHP_SELF = /php/iamview.php
SCRIPT_FILENAME = c:/program files/apache group/apache/htdocs/php/iamview.php
PATH_TRANSLATED = c:/program files/apache group/apache/htdocs/php/iamview.php
SCRIPT_NAME = /php/iamview.php
__FILE__ = c:\program files\apache group\apache\htdocs\php\iambean.php

いけました!こんなのマニュアル載ってましたっけ??
ありがとうございました。
0430nobodyさん02/10/16 02:53ID:QXwwjHEP
>>420
私はめんどくさいのでUTF-8Nです
0431nobodyさん02/10/16 02:56ID:m/rwzFSQ
PHPでフォームを使ってファイル・アップローダーを作成した場合
・複数のファイルを選択してアップロード出来ますか?
・ファイルではなくディレクトリを指定して、その階層下のファイル、サブディレクトリをアップロード出来ますか?
0432nobodyさん02/10/16 03:05ID:FAL4tSOv
PEARにtarでアーカイブする関数があるから階層ごとアッブロード出来んじゃないの?複数選択はブラウザからは無理っぽい
0433nobodyさん02/10/16 03:09ID:???
>>432
input type=file
を沢山作れば出来るっしょ?
0434nobodyさん02/10/16 11:08ID:m/rwzFSQ
>>432 >>433

サンプルスクリプトどこかにありませんか?
0435nobodyさん02/10/16 11:40ID:FAL4tSOv
サンプルなら本に載っている。でもtarしてアップは知らない。出来るの?
0436nobodyさん02/10/16 12:35ID:???
ディレクトリのアップロードは出来ない。
0437nobodyさん02/10/16 15:28ID:???
>>433
基本的にそれでいいけど、formの方で
<input type="file" name="file[0]"> とやって受ける方で
配列の数だけループさせんのが楽です。
0438nobodyさん02/10/17 13:19ID:wnOpV9ll
セッションを使ってみたのですが、30分程度アクセスしていないと
ブラウザを閉じなくてもセッションが切れてしまうみたいです。
php.iniのsession.cookie_lifetimeとかsession.gc_lifetimeとかも
いろいろいじっみたんですがやっぱり30分前後で切れてしまうようです。

もっとセッションを長く持つことはできないのでしょうか・・・
0439nobodyさん02/10/17 13:30ID:???
>>438
PHPじゃなくてサーバ(Apacheとか)の設定じゃないのかな。
0440nobodyさん02/10/17 13:56ID:frKHjIQw
>>438
Defaultだとセッション情報の生存時間は24分になってる
session.max_lifetime = 1440
ただし、24分以降のアクセスが有った場合に
session.gc_probability = n
 で定義されているn%の確率でガベージコレクション処理が
実行される。
アクセスがなければ、セッション情報はアボーンされない。
デフォルトはsession.gc_probability = 1
だから、結構なアクセス数がないとgcは開始しないはず
何だけど
044144002/10/17 13:58ID:frKHjIQw
間違った
 s/max_lifetime/gc_maxlifetime/
0442x02/10/17 14:28ID:93YjN7NA
これって本当か?

↓ ↓ ↓
http://www.dream-express-web.com/space-trust.htm
044343802/10/17 14:51ID:dtum+/dq
ありがとうございます
gc_maxlifetimeってそういう意味だったんですね
ドキュメントみてもよくわからなくて。
アクセスが結構あるのでこの値を大きくしてみます
0444nobodyさん02/10/17 17:30ID:B8kY3RPw
UNIQID というのはどうやって得るんでしょう?
0445nobodyさん02/10/17 17:40ID:???
$id = uniqid("");
echo $id;
0446nobodyさん02/10/17 18:23ID:B8kY3RPw
$token = md5(uniqid("")); // ランダム要素なし
$better_token = md5(uniqid(rand())); // 推測が困難であり、より優れている。
0447nobodyさん02/10/17 18:24ID:B8kY3RPw
>>445
お返事ありがとうございます。
>>446のようなのを見つけました。
0448nobodyさん02/10/17 20:10ID:???
>>444
ここのレスはすべてマニュアルをちょっと見ればわかるものだな。
0449nobodyさん02/10/17 23:11ID:???
>448
ここのレスだけじゃなくMLもな
0450nobodyさん02/10/18 11:07ID:???
php4.0.6(FreeBSD 4.2)での話なんですが

$mail_status = mb_send_mail($form["recipient"],$form["subject"],$mailbody,$mail_header);
の$mail_headerに一部日本語を含めてます(From:[email protected](名無しさん) みたいに)

で、mb_send_mail は、仕様として、最後の引数(ヘッダ)だけは文字コード変換してくれないのでしょうか?

上記のままだと、本文やタイトルは文字化けしてませんが、
From:[email protected](名無しさん) の日本語だけ、化けてます。

なので、
$mail_header = mb_convert_encoding($mail_header, "JIS", "JIS, eucjp-win, sjis-win");
としたら、文字化けは解消されたのですが。。。

こういう仕様なんでしょうか?
0451nobodyさん02/10/18 15:20ID:???
>>450
マニュアル
045245002/10/19 03:30ID:Rs0UFwL7
>>451
マニュアル見ても、string mb_language ( [string language])の設定によって、変換・エンコードされる
としか書いてないです。。。

やぱ、
boolean mb_send_mail ( string to, string subject, string message [, string additional_headers [, string additional_parameter]])
のstring additional_headersは、そのままスルーなんでしょうか・・・?
0453nobodyさん02/10/19 04:44ID:???
*.php以外のインクルードされるファイルは、htdocsの下には置かないほうが、
セキュリティ上望ましいと、聞いたことあります。
で・・・質問です。

<インクルードされるファイルは「*.inc、*.conf」の拡張子に限る>というルールをつくった上で、

<Files ~ "\.(inc|conf)$">
order allow,deny
deny from all
</Files>

をhttpd.confに加えれば、htdocsの下に「*.inc、*.conf」を置いても、セキュリティ上の問題は、
ないんじゃなかろうかと思ったんですが、実際、どうなんでしょう?
0454age02/10/19 10:02ID:???
php.ini の各項目の詳細を日本語で書いてるサイトないですか?
0455nobodyさん02/10/19 10:46ID:3cLIDoBp
>>453
それで安全だろ。
0456nobodyさん02/10/19 17:12ID:???
>>453
エディタが、拡張しPHPでないとphpのモードにならいので、
インクルードするファイルもすべて*.phpにしてmath
0457nobodyさん02/10/19 17:48ID:???
>>456
WinならTeraPadでも使えば?
MacならMi(ミミカキエディット)。
0458nobodyさん02/10/20 07:20ID:???
たとえば掲示板で、データをテキストファイルに1発言1行で格納してあるとします。

たとえばレスをはじめから10件読む場合には、
1行づつ読み込んで、10行目を読み込んだ時点でファイルを閉じればいいですね。

しかし、「最新のレス10件」を読み込む場合には、
レスの範囲を計算するためには、「全部で何行あるか」を調べなくてはいけませんね。

そうすると、feofまで読み込んで、fseek等をしつつ、行数を調べてから、
改めてファイルを読み込むと言うことになります。

それなら、fileで一気にファイルを配列に読み込んで、その後でarray_spliceなりを
施せばいいのですが、データファイルが200KB,300KBにもなるとそれは
さけたいですね。

アドバイスをお願いします。
045945802/10/20 07:25ID:???
すんません。下げちゃいました。
それにしても、この板、人口少ないですね。
0460nobodyさん02/10/20 08:06ID:???
>>458
> データファイルが200KB,300KBにもなるとそれは
> さけたいですね。

その程度なら全部を配列に読みこんでも良いのでは?
0461nobodyさん02/10/20 09:19ID:3NSvh+yz
>>458
書き込み時に、何行書き出すか取得して、それを別ファイルに落とす。
んで、その別ファイルには何行あるか、と言う数値が1行ずつしか書き込まれない。
で、その別ファイルを10行分読み込んで、10行分の数値を全て足した数値+タグ分の数値で、
何行まで読み込めばいいか、処理出来ると思うが。
これだと、メッセージ編集した場合の書き換え処理が大変だが、メッセージ編集しないのであれば
これでいいと思われ。
0462redeclareさん02/10/20 11:43ID:TH9l9BrQ
同じクラスを2回以上includeすると
Fatal error: Cannot redeclare class logger in
c:\apache\htdocs\php\logger.php on line 2
と言われてしまいます。
Javaでは同じクラスを何度もimportできるのに・・・。
この場合どのような構成にしたらよいのでしょうか?
コードを以下に示します。
0463redeclareさん02/10/20 11:49ID:TH9l9BrQ
includetest.php
<?php
  include "hello.php";  $hello = new hello;
  include "goodbye.php";  $goodbye = new goodbye;
?>
<html><head></head><body><?=($hello->msg().$goodbye->msg())?></body></html>
hello.php
<?php
  class hello{
    function msg(){
      $msg = "Hello,2chWorld.<br>\n";
      include "logger.php"; $logger = new logger; $logger->log();
      return $msg;
    }
  }
?>
goodbye.php
<?php
  class goodbye{
    function msg(){
      $msg = "Goodbye,2chWorld.<br>\n";
      include "logger.php"; $logger = new logger; $logger->log();
      return $msg;
    }
  }
?>
logger.php
<?php
  class logger{function log(){}}
?>
0464nobodyさん02/10/20 12:12ID:???
>>462
include_once
require_once
0465redeclareさん02/10/20 12:21ID:TH9l9BrQ
>>464
できました!
今までリクエストが送られるたびに
初期処理的にfactoryクラスを呼んで
$GLOBALSに共通利用されるクラスをいれて使用するという
なんともまどろっこしいことをしてましたが
これで解決です。感謝!
0466nobodyさん02/10/20 16:50ID:jWiCSXPt
<? include("$HTTP_SERVER_VARS[DOCUMENT_ROOT]/common/footer.inc");?>

って、もっとスマートな書き方
($HTTP_SERVER_VARS[DOCUMENT_ROOT] なんて使わずに)
あります?

SSI include みたいな。
■ このスレッドは過去ログ倉庫に格納されています