【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あたりにきっと誰かが……。
0352313=320=348
02/10/06 17:12ID:???むむむ、まだダメなんだ。
>>349の言うとおり、単独で試したほうがよさそうな。
0354350
02/10/06 17:43ID:???>>349,>>351
ありがとうございました。単独で試したら動作しました。が、
自分が2chに飛ばされてしまいました。
もちろん、自分のホスト名は記述してません。
何故なんでしょうか…
0355nobodyさん
02/10/06 18:39ID:???<?php
$host = $_SERVER['REMOTE_HOST'];
$acpos = eregi("拒否ホスト名",$host);
if($acpos){
header("Location: http://www.2ch.net/");
}else{
print "飛んでない";
}
?>
0356354
02/10/06 19:03ID:???>>355
上手く動作しました! ここまで色々情報を頂き、
皆さん本当にありがとうございました。
0357313=320=348
02/10/06 19:12ID:???おー、うまくいったのね、よかったね。
>>355のスクリプト、俺の環境(4.2.2)で試すとうまく動かない…
ホスト自体が取得できてないからなんだが、これって環境の問題かな?
スクリプトの問題じゃないのは明白なので不思議だ。
やっぱ自分のとこでは>>313式がちゃんと動くようです。
<?
$addr = getenv("REMOTE_ADDR");
$host = getenv("REMOTE_HOST");
if($host == "" or $host == $addr){
$host = gethostbyaddr($addr);
}
$hantei = ereg("拒否ホストA|拒否ホストB", $host);
if($hantei == 1){
header("Location: http://www.2ch.net/");
}
?>
0358nobodyさん
02/10/06 22:23ID:???それは鯖の設定でホストが抜けない様になってるんだよ
だからgethostbyaddr()関数を使って、IPアドレスから
ホストを問い合わせる必要がある。
そんな余分な処理をするより、IPアドレスで制限した方が
負担が少ない。
0359nobodyさん
02/10/06 22:28ID:???ここのマニュアルにある、
> "\0..\37" のようにcharlistに範囲を指定可能で す。この場合、アスキーコードが 0 から 31 の範囲の文字は全てエスケー プされます。
これってどういう意味?単なるtypo?
0361359
02/10/06 23:58ID:???うーん、どこをどう読んでも
"\0..\37"ってのが、どうして"0から31"になるのか理解できないんで、
どういうことなのか御教授キボンヌ。
0362359
02/10/07 00:04ID:???たびたびスレ汚ししてスマン>ALL
>アスキーコードが32未満または126より大きい文 字は、8進表現に変換されます。
ここを見落としてた。
0363荒川太郎
02/10/07 17:52ID:bKtEI8Ri特定ディレクトリ以下の、パス情報をパラメータとして取得することはできるでしょうか?
例:
http://hogehoge.com/test/param1/param2
上記の場合、
1.test/ 以下のパス情報は無視されて、hoge.php が呼ばれる。
2.test/ 以下の param1/param2 の情報を hoge.php の中で使用する。
Servlet では同じようなことを、tomcat の設定ファイルでやっていたんですけど、
PHPでやらなくてはならなくなり、いろいろ調べているのですが、いい方法がみつかりません。
ちなみに tomcat では web.xml で
<servlet-mapping>
<servlet-name>
HogeHogeServlet
</servlet-name>
<url-pattern>
/test/*
</url-pattern>
</servlet-mapping>
というような設定をして行っていました。
apache+PHP でも同様のことができるのでしょうか?
0365hmk
02/10/07 18:41ID:???0367hmk
02/10/07 20:33ID:???板違いで申し訳ないが、ちなみに儂は、
http://***/xyz へのアクセスを http://***/index.php?code=xyz
と読み替えさせるためにrewrite使ったことがあります。
0368荒川太郎
02/10/07 20:38ID:bKtEI8Riどもです、この辺の話は、ここだとまずかったかな?
apache関連の板ってあるのかな?
0369nobodyさん
02/10/08 02:52ID:mDZCCxjWimagemagickってーの使えばできるぽ
外部コマンド使うか、pearのPECLぱっけじいんすとしれ
0370nobodyさん
02/10/09 01:22ID:Cmd2yG94perlでは簡単に出来るんだけど、phpのsetcookie()を使うとJavaScriptで取得したときに
文字が化けちゃうよ。
setcookie()を使わずに、書き込みもJavaScriptを使えば良いんだろうけど、
なるべくならphpを使いたいな。
どなたか良い方法を知っている方いませんか?
0371nobodyさん
02/10/09 02:49ID:uMeBQ3Ig0375hmk
02/10/09 13:29ID:???文字化けしないコードに変換してからsetcookie()すればいいだけでしょ、たぶん。
>>373
>>19の説明だけだと、PHP+PEAR+Accessについてよく知っている人でないと答えにくいと思う。
答える側の手を煩わせないように、前後のコードやデータとあわせて、�@期待したい結果�A実際の結果�Bエラー等が出力された場合はその出力
を簡潔に書くべきだと思う。
0377あくせる
02/10/09 16:21ID:DrstWiBSですよね。
なんで、insert するときわざわざ $nowdate かわかんない。
テーブルこしらえるときに date TIMESTAMP DEFAULT CURRENT_TIMESTAMP とか。
Access なら「規定値」にDate()じゃだめなの?
0379nobodyさん
02/10/10 10:48ID:???セッションについて質問があるのでよろしくお願いします。
記述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:???良く分からんが、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:???セッション変数に登録しようとすると、暗黙のうちにsession_start()を
まだ呼び出していなかったら呼び出します。
ML過去ログにも同様のネタはあるよ。2年近く前だったかなー。
0382nobodyさん
02/10/11 04:39ID:Dj1Sz5F3<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が出てしまいます。
回避する方法はありませんでしょうか。
よろしくお願いします。
0383382
02/10/11 05:24ID:???{literal}
{/literal}
で囲んでおけばよかったんですね。
しかし、SmartyってWYSIWYG環境でHTML作ること考えてないのかな?
0384age
02/10/11 13:13ID:???例)サーバに画像掲示板100個設置
0385nobodyさん
02/10/11 15:40ID:???0386nobodyさん
02/10/11 15:56ID:???0387nobody
02/10/11 23:07ID:???現在、<A href=〜>で、自分自身(php)を呼び出し、色々チェックをして、オッケーであれば
別の画面へリンクしたいのですが、チェック後オッケーであれば、header("Location: http=hogehoge")で、
別画面へ移動しています。
しかし、クライアントから「新規にウィンドウをオープンして表示して欲しい」とリクエストがあり、
困っています。
どうすれば、実現可能でしょうか?
新規ウィンドウを開くにはJavaScriptを使うのだが、チェックしてダメな場合は
新規ウィンドウを開かずに元のウィンドウで修正させたいわけですな。
元のウィンドウに隠しフレームを作っておいて、リンク先をとりあえず隠し
フレームしておく。そこでチェックしてOKなら隠しフレームからJavaScriptで
新規ウィンドウを開く。ダメなら元のウィンドウへ修正画面を出す。
で、どうよ。
0389387
02/10/11 23:41ID:???レスありがとうございます。
>チェックしてダメな場合は新規ウィンドウを開かずに元のウィンドウで修正させたいわけですな。
そうです、そうです。
やはりJavaScriptを使わないと無理でしょうか?
<A href=hogehoge target="_brank">のように、簡単にphpでチェック後自動的に
移動したいのです。
クライアントの要望では「なるべくJavaScriptを多用しない」とあるのです。
(フォームの入力チェックくらい)
なので、悩んでいます。
なにか、名案がありましたらご指導ください。
JavaScriptの多用はダメって何でかな?
一切ダメってなら理解できないわけでもないのだが...
で、<A href=hogehoge target="_brank"> こうするとダメな場合でも
新規ウィンドウを開いちゃうわけだが、『入力に間違いがあるので、
修正してください』ってなメッセージを表示して元ウィンドウでの修正を
促すようにするとか...
クライアントの意向も含めて内容がわからないので、これ以上は
なんともだな。
0391nobodyさん
02/10/12 00:43ID:RgMaTiubとかして、開く先でチェックする。
チェック不通過なら、
header("Location: http=motopage?check=out")
で送り返す。
ってのは?
不通過の場合新しいページは開いたまま元のページを表示しちゃうけどね。
0392nobodyさん
02/10/12 01:41ID:???といいたい気持ちを抑えつつ、ひとつ案を出してみます。
<? if( $checkresult == "ok" ){ ?>
<body onLoad="window.open('thisfile.html')">
<? } else { ?>
<body>
<? } ?>
0393389
02/10/12 02:08ID:???結局、392さんの案を使わせていただきました。
>どう考えてもページ遷移の設計に問題あるだろ。
そうですね〜。
388さんの案でもいいのですが、「そこまでするのもな〜〜」っていう感じのものなのです。
とりあえず、実現できました。ありがとうございました。
おっ! なるほどぉ。
ワシも勉強になった。
0395( ´ー`)y-~~ ◆f7mhnEfPcU
02/10/13 02:59ID:5MS6fmVa0396nana
02/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];
}
その前にそんな配列を作って後で苦労しねぇか。
0400nana
02/10/14 13:05ID:???想定していないフォーマットでテキストファイルを
受け取ってしまって、これをデータベースに登録して
いかなくてはならないんです。。
しかもテキストファイルの中身の「順序」が下記のように
まちまちなので、行単位で読み込みながら連想配列に
しておけば、データベースに登録していく際に間違いが
減るのでは、と思ったのですが…考え方が間違ってますでしょうか??
ファイル1: 出席番号<>1<>名前<>安藤<>科目<>数学<>点数<>85
ファイル2: 名前<>伊藤<>出席番号<>2<>科目<>数学<>点数<>65
科目は数学だけではないだろうから、配列の次元を増やすか、
配列変数そのもを増やすかしないと...と思ったわけよ。
最終集計をデータベースでやるので仮だ! ってなら別にいいけどよ。
0402nana
02/10/14 13:40ID:???仰るとおり、集計などはデータベースに登録してから
行うつもりでした…お気遣いありがとうございました。
0403nobodyさん
02/10/14 14:40ID:c/k9cDX2セッションというのがいまいちよく分かりません。
セッション変数は、サーバー側に保持しているんですよね?
だとしたら、長い間運用していたら
サーバー側のリソースがいっぱいになってしまわないのでしょうか?
ブラウザが閉じられたらセッションも終了する、と解説書に書いてありますが、
クライアント側がハングアップした場合等でもうまく処理されるのでしょうか?
0404nobodyさん
02/10/14 14:48ID:???インストールしています。 以下を教えて下さい。
ローカルな環境で REMOTE_ADDR を取得したいのですが、
<?php
print "remote_addr=".getenv("REMOTE_ADDR"). "<br>";
?>
では getenv 部分が空白になってしまいます。
phpinfo() では _SERVER["REMOTE_ADDR"] に正常な IP が表示されています。
php.ini は変更していません。
0405nobodyさん
02/10/14 15:10ID:???ん?どうゆうこと?普通こうじゃないの?
<?
$remote_addr = getenv("REMOTE_ADDR");
print "remote_addr=".$remote_addr. "<br>";
?>
0406
02/10/14 15:16ID:qwp05sUrpreg_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注意 この関数は、ISAPIモードでは動作しません
<?=$_SERVER["REMOTE_ADDR"]?>
0409404 NotFound
02/10/14 15:24ID:???たくさんありがとうございます。
print "remote_addr=" .$_SERVER['REMOTE_ADDR']."<br>";
で表示はされました。
ISAPIモード...ですか... 検索してみます。
0410403
02/10/14 16:07ID:???なるほどー。時間制限があるわけですね。
ありがとうございました。
0411nobodyさん
02/10/14 16:19ID:x52xQDqkどのバージョンからそうなったんだ?
以前は機能していたのに。
確認したら確かにCGIモードでしか値を返さないな。
0412nana
02/10/14 18:33ID:???正規表現は難しいので殆ど使ったことがないのですが、
書いていただいた意味を調べて理解したいと思います。
ご親切にありがとうございました。
0413nobodyさん
02/10/14 19:55ID:H8/ENmxFecho readfile(filename);
すると、filenameの内容となぜかバイト数が表示されるのですが、
これを抑制するにはどうしたらいいですか。
例
file.txt
ああああああああああ
echo readfile("file.txt");
結果
ああああああああああ
20
0415nobodyさん
02/10/14 20:11ID:H8/ENmxFReturns the number of bytes read from the file
あじやー
素直にfgets デモ使います。
定型html部分をインクルード(バックスラッシュなし)しようと思ったのだが、
0416hmk
02/10/14 20:48ID:r0BZ2PpZインクルードしたいのならinclude()すれば?
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テキスト検索付きの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:???http://www.php.net/manual/ja/ref.mbstring.php
0421s
02/10/15 13:02ID:MW777drM0422nobodyさん
02/10/15 17:15ID:60o/Yyha$hogeで受け取るのと何が違うの?
0425418
02/10/15 18:50ID:???eregi()で検索する方法をやめて、
mb_strpos()を使うようにしたらうまくいきました…
0426nobodyさん
02/10/15 18:54ID:MbJ1xrNTだれかこれ使ってる人居ない?
0427nobodyさん
02/10/16 02:07ID:???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:???__FILE__は?
0429nobodyさん
02/10/16 02:37ID:???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私はめんどくさいのでUTF-8Nです
0431nobodyさん
02/10/16 02:56ID:m/rwzFSQ・複数のファイルを選択してアップロード出来ますか?
・ファイルではなくディレクトリを指定して、その階層下のファイル、サブディレクトリをアップロード出来ますか?
0432nobodyさん
02/10/16 03:05ID:FAL4tSOv0435nobodyさん
02/10/16 11:40ID:FAL4tSOv0436nobodyさん
02/10/16 12:35ID:???0437nobodyさん
02/10/16 15:28ID:???基本的にそれでいいけど、formの方で
<input type="file" name="file[0]"> とやって受ける方で
配列の数だけループさせんのが楽です。
0438nobodyさん
02/10/17 13:19ID:wnOpV9llブラウザを閉じなくてもセッションが切れてしまうみたいです。
php.iniのsession.cookie_lifetimeとかsession.gc_lifetimeとかも
いろいろいじっみたんですがやっぱり30分前後で切れてしまうようです。
もっとセッションを長く持つことはできないのでしょうか・・・
0440nobodyさん
02/10/17 13:56ID:frKHjIQwDefaultだとセッション情報の生存時間は24分になってる
session.max_lifetime = 1440
ただし、24分以降のアクセスが有った場合に
session.gc_probability = n
で定義されているn%の確率でガベージコレクション処理が
実行される。
アクセスがなければ、セッション情報はアボーンされない。
デフォルトはsession.gc_probability = 1
だから、結構なアクセス数がないとgcは開始しないはず
何だけど
0441440
02/10/17 13:58ID:frKHjIQws/max_lifetime/gc_maxlifetime/
0442x
02/10/17 14:28ID:93YjN7NA↓ ↓ ↓
http://www.dream-express-web.com/space-trust.htm
0443438
02/10/17 14:51ID:dtum+/dqgc_maxlifetimeってそういう意味だったんですね
ドキュメントみてもよくわからなくて。
アクセスが結構あるのでこの値を大きくしてみます
0444nobodyさん
02/10/17 17:30ID:B8kY3RPw0445nobodyさん
02/10/17 17:40ID:???echo $id;
0446nobodyさん
02/10/17 18:23ID:B8kY3RPw$better_token = md5(uniqid(rand())); // 推測が困難であり、より優れている。
0449nobodyさん
02/10/17 23:11ID:???ここのレスだけじゃなくMLもな
0450nobodyさん
02/10/18 11:07ID:???$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");
としたら、文字化けは解消されたのですが。。。
こういう仕様なんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています