トップページ⇒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あたりにきっと誰かが……。
030430002/10/05 00:57ID:???
すみません、するべき質問が間違ってたみたいです。

$file = file("data.html");
$html = implode('', $file);
list($head, $main) = explode ("<!--cut-->", $html);

この$mainに<td>$name</td>などが入っているのですが、(echoで確認済み)
前記のように展開がうまくいきません。
普通に$main="<td>$name</td>"とした場合と↑との違いは何なのでしょう?
0305nobodyさん02/10/05 01:37ID:???
>>304
すんげぇ発想だな。
展開しないのだったら素直に諦めろ。
ちなみに
$data='<td>$name</td>';
とかだったら展開しないだろ。右辺の扱いが違うんだよ。
0306nobodyさん02/10/05 01:42ID:???
>>304
ひょっとして
data.htmlの中に「$name」って書いてるのか?
0307nobodyさん02/10/05 10:48ID:???
$name をHTMLから取ってくるってことなんかね?
0308nobodyさん02/10/05 16:28ID:ERAiXWsY
2chのようなURLで、例えば
「http://pc.2ch.net/test/read.cgi/php/1031721334/l50」の
「/php/1031721334/l50」の部分をread.cgiで取得する方法を教えて下さい。
すごく簡単にできたような気がするんだけど、コード書くの久しぶりだから忘れた…
0309nobodyさん02/10/05 16:39ID:PH1wtlYb
PHPでページにアクセス制限をすることは可能ですか?
.htaccessと似たようなことがしたい(特定のホストを弾くなど)のですが・・・
0310nobodyさん02/10/05 16:50ID:???
>>308

PHP スレだけど、分かってる?


>>309

可能。
031130802/10/05 17:11ID:???
思い出した、PATH_INFOだ。
0312sleepy galaxy02/10/05 17:18ID:KAWXlSoz
超おすすめメールマガジン
sleepy galaxyだよ
http://www.msleep.com/jp/sg/
( ´,_ゝ`)( ´,_ゝ`)( ´,_ゝ`)( ´,_ゝ`)( ´,_ゝ`)
0313nobodyさん02/10/05 17:26ID:???
>>309 こんなのは?

<?
$r_addr = getenv("REMOTE_ADDR");
$r_host = getenv("REMOTE_HOST");
if($r_host=="" or $r_host==$r_addr){
$r_host = @gethostbyaddr($r_addr);
}
$hantei = ereg("拒否したいホストA|拒否したいホストB", $r_host);
if($hantei == 1){
header("Location: http://www.2ch.net/"); //飛ばし先
}
?>
031430902/10/05 17:39ID:PH1wtlYb
>>313

ありがとうございます。でもコピペしてみたら、
エラーが発生してしまいました……どこに問題があるんでしょうか。
0315nobodyさん02/10/05 18:43ID:???
エラーメッセージくらい書きませう。
031630902/10/05 20:08ID:???
>>315

エラーメッセージはこんな感じです。

Parse error: parse error, unexpected '@' in /****/****/****/****/index.php on line 35
0317名無しさん02/10/05 20:21ID:???
$aa="1\n2\n";
としたとたん、$aaの中身が
"1\r\n2\r\n"
になってしまってウザイのですが、どうやって回避すればいいのでしょうか?
おしえてください!
verは4.2.2でし、、
0318名無しさん02/10/05 21:12ID:pMN6x92i
317です
うそついていました
問題なく内部ではうごいていました

031930002/10/05 21:22ID:???
>>306 >>307
デザインを別ファイルにしたかったので、こんな意味不明なことを。
(よくある掲示板スクリプトの「スキン」みたいに)
何か別の方法考えてみます…。
032031302/10/05 22:43ID:???
>>316 ここかな。

$r_host = @gethostbyaddr($r_addr);

gethostbyaddr関数の前の「@」が邪魔してんのかな。
無くても大丈夫だからとってみたら。
うちではあってもなくても動くけど。
0321nobodyさん02/10/05 22:43ID:5gdnUDvW
PHPにGDライブラリいれて使っているのですが、
画像をresizeして出力することはできるのですが、
縦のものを横にするようなことはできないんでしょうか?

スレ違いだったらスマソ。
0322nobodyさん02/10/06 00:56ID:FiROMDEK
Htmlのなかに
<ul>


</ul>
この部分があって、これを取り除きたいのですが、
厨房なのでわかりません。

$hoge = ereg_replace("<ul>\n\n</ul>","",$hoge)

このようにしていますがだめっぽです。
ご教授おねがいします。

0323nobodyさん02/10/06 01:07ID:???
><ul>
>
>
></ul>

\nが3回あるけど?
0324nobodyさん02/10/06 01:12ID:FiROMDEK
>323
それしてもだめぽでした
0325hmk02/10/06 01:34ID:???
>322
$hoge = ereg_replace("<ul>.*</ul>", "", $hoge);
0326nobodyさん02/10/06 02:08ID:FiROMDEK
>>325
それだめなんすよー
<ul>
<li>ほげ
</ul>
ってのは 消したらだめなんですよー
0327hmk02/10/06 02:11ID:???
>>326
あなたは何をやりたいのですか?
<ul>と</ul>だけを消したいのですか?
0328nobodyさん02/10/06 02:26ID:FiROMDEK
>>327
<ul>と</ul>の間に2個の改行が入っている場合っす。
0329hmk02/10/06 02:28ID:???
>>328
改行コードが\r\nになってるんでないの?
0330nobodyさん02/10/06 02:29ID:FiROMDEK
>>329
といいますと?
0331hmk02/10/06 02:32ID:???
$hoge = ereg_replace("<ul>\r\n\r\n</ul>", "", $hoge);
か
$hoge = ereg_replace("<ul>\r\n\r\n\r\n</ul>", "", $hoge);
を試してみよ。
0332hmk02/10/06 02:36ID:???
>>331 事故レス
ereg_replace()でなく、str_replace()で十分か。
0333hmk02/10/06 03:06ID:???
老婆心ながら、解説しておく。

Windows環境で編集されたファイルの標準的な改行は復帰+改行(\r\n)である。
また、UNIX系では\nのみ、Macでは\rのみである。

PHPにおいて、出力する場合は\nとしておけば通常は問題ない。
ただし、クライアントから送信されてきたデータを扱う場合には、改行コードを考慮に入れる必要がある。

複数のOSを考えなければならない場合、改行コードを正規表現(\r\n|[\r\n])で扱うのが簡便であろうか。

うんこ食って寝ます。。。
0334nobodyさん02/10/06 03:12ID:FiROMDEK
>>331
だめっぽですねー
0335hmk02/10/06 03:19ID:???
>>334
まだうんこ食ってないので即レスしますが、
だめぽな原因が、なにか文字列の置換とは別のところにあるのでは?
差し支えなければ、ソースを晒してみよ。
儂か、ほかの誰かが原因を教えてくれるだろうから。
0336nobodyさん02/10/06 03:36ID:FiROMDEK
>335
ソースはあれだけっすけど
dmozのHTMLをちょこちょこいじくってます
0337hmk02/10/06 03:51ID:???
>>336 dmoz???
もっと質問上手になって下ちい。
つまり、自分と同じ状況を相手が再現できるようにしなければなりまそん。
そうでない場合、皆は答えたくても憶測で答えるしかできまそん。

儂も儂で、実はPHPを動かす環境をもってなくて悪いのですが、、、
0338hmk02/10/06 04:05ID:???
実はスペースが紛れ込んでいるというオチとかを憶測するとして、
また、<ul></ul>間に「2個の改行が入っている場合」というのを「表示するべきデータがない場合」と拡大解釈するとして、

$hoge = ereg_replace("<ul>[:space:]*</ul>", "", $hoge);

を試してみよ。

もう本当にうんこを食って寝ます。。。
0339hmk02/10/06 04:08ID:???
事故レス
$hoge = ereg_replace("<ul>[[:space:]]*</ul>", "", $hoge);
でした。
0340nobodyさん02/10/06 04:51ID:???
Open Directory 厨ですか?
あそこは糞ですよ。
統率執れてないし。
0341駆け出し02/10/06 08:28ID:XXgIkL71
$hoge = ereg("<ul>.*</ul>", $hoge);
$hoge = ereg_replace("\r\n", "", $hoge);
$hoge = ereg_replace("\n", "", $hoge);
$hoge = ereg_replace("\r", "", $hoge);

こういう事?
0342名無しさん02/10/06 08:43ID:???
このホームページの製作者が規約違反で逮捕されたそうです

http://plaza.rakuten.co.jp/a240a/
0343駆け出し02/10/06 08:54ID:6TGeGVMz
あ、一行目からまちがえてる。。。

逝ってきます。
034431602/10/06 13:49ID:???
>>309=>>316 です。

>>320

試しに @ を外してみたのですが、やはり動作しませんでした。
バージョンは4.2ですが、何か関係があるのでしょうか?
度々質問してすみません。
0345nobodyさん02/10/06 14:38ID:pKfa3/8w
>>344
バージョンは4.2
$addr = $_SERVER['REMOTE_ADDR'];
$host = $_SERVER['REMOTE_HOST'];
$acpos = strstr($addr, "拒否したいホストA|拒否したいホスト");
if($acpos) header("Location: http://www.2ch.net/"); //飛ばし先
0346nobodyさん02/10/06 15:15ID:???
>>345

ありがとうございます。でも、試したところまたエラーが出てしまいました。

Parse error: parse error in /****/***/****/****/index.php on line 31
ちなみに31行目は
if($acpos) header("Location: http://www.2ch.net/"); //飛ばし先
の部分です。
何か打つ手がありましたら教えて下さい。
0347nobodyさん02/10/06 15:17ID:???
すみません、>>346=>>309=>>316 です。
0348313=32002/10/06 16:37ID:???
>>345
おー、strstr()関数って初めて知った…俺も触って1週間の素人なので。
ereg使うまでもないときは便利ですね。

>>346
345をそのままコピペしてるとして、
「拒否したいホスト」の部分にリモートホストのドメイン名
(例えばiij.ad.jpとか)を書いてるとしたら、動かない。
345のスクリプトは$hostは見ないで、$addrで判断してるから、
「拒否したいホスト」はIPアドレスで指定しないといけない。
あと、最後の行(Parse Errorが出てる文)も動かないかな?
ちっと345を元にして直してみた。4.2.2で動作してます。

index.php内に記述
<?
$host = $_SERVER['REMOTE_HOST'];
$acpos = strstr($host, "拒否したいホストをドメイン名で");
if(isset($acpos)) header("Location: http://www.2ch.net/");
?>
0349nobodyさん02/10/06 16:48ID:???
>>347
うちで試してみたけど動いたよ
1. 省略せずに書いてみる
2. コメントを消してみる
 if( ... ){ header(" ... ") }
 else{ print ("OK"); }

parseエラーの行数が気になる
なんかのプログラムの途中に入れてるみたいだけど単独で試してみたら?
035034602/10/06 16:53ID:???
=>>309=>>316 です。

>>348

ありがとうございます。でも、またしてもエラーが出てしまいました…
Warning: Cannot add header information -
headers already sent by (output started at /****/***/***/***/index.php:16)
in /****/****/****/****/index.php on line 27

27行目は
if(isset($acpos)) header("Location: http://www.2ch.net/");
の部分です。同じ環境なのにどうして動作しないんでしょうか。
0351nobodyさん02/10/06 17:12ID:???
>>355

header("Location: http://www.2ch.net/");
の前に何か出力してないか?

<html><body>
<?
header("Location: http://www.2ch.net/");
?>

もダメだぞ
0352313=320=34802/10/06 17:12ID:???
>>350
むむむ、まだダメなんだ。
>>349の言うとおり、単独で試したほうがよさそうな。
035335102/10/06 17:12ID:???
>>350
だったよスマソ
035435002/10/06 17:43ID:???
=>>346=>>309=>>316 です。

>>349,>>351

ありがとうございました。単独で試したら動作しました。が、
自分が2chに飛ばされてしまいました。
もちろん、自分のホスト名は記述してません。
何故なんでしょうか…
0355nobodyさん02/10/06 18:39ID:???
>>354
<?php
$host = $_SERVER['REMOTE_HOST'];
$acpos = eregi("拒否ホスト名",$host);
if($acpos){
header("Location: http://www.2ch.net/");
}else{
print "飛んでない";
}
?>
035635402/10/06 19:03ID:???
=>>350=>>346=>>316=>>309 です。

>>355

上手く動作しました! ここまで色々情報を頂き、
皆さん本当にありがとうございました。
0357313=320=34802/10/06 19:12ID:???
>>356
おー、うまくいったのね、よかったね。

>>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:???
>>357
それは鯖の設定でホストが抜けない様になってるんだよ
だからgethostbyaddr()関数を使って、IPアドレスから
ホストを問い合わせる必要がある。

そんな余分な処理をするより、IPアドレスで制限した方が
負担が少ない。
0359nobodyさん02/10/06 22:28ID:???
http://www.php.net/manual/ja/function.addcslashes.php
ここのマニュアルにある、
> "\0..\37" のようにcharlistに範囲を指定可能で す。この場合、アスキーコードが 0 から 31 の範囲の文字は全てエスケー プされます。

これってどういう意味?単なるtypo?
0360nobodyさん02/10/06 22:41ID:???
>>359
そのままの意味
036135902/10/06 23:58ID:???
>>360
うーん、どこをどう読んでも
"\0..\37"ってのが、どうして"0から31"になるのか理解できないんで、
どういうことなのか御教授キボンヌ。
036235902/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 でも同様のことができるのでしょうか?
0364nobodyさん02/10/07 18:08ID:???
>>363
mod_rewrite使ったらできそう。
0365hmk02/10/07 18:41ID:???
mod_rewrite使え
0366荒川太郎02/10/07 20:25ID:bKtEI8Ri
>>364
>>365

 ありがとうございます!
 mod_rewrite について検索してきますっ!
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 は変更していません。
■ このスレッドは過去ログ倉庫に格納されています