トップページ⇒php
853コメント275KB

【PHP】初心者コーナー 3 Released【スローモード】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/11 06:24ID:???
PHPに関するアホな質問はここで、マターリやろな。
ファイル MySQL PostgreSQL 正規表現でも なんでもいってみ
でもな、アホな質問であっても詳しく質問しろよ。 ネタはおもしろく書けよ。

前スレ http://pc2.2ch.net/test/read.cgi/php/1048442813/l50

■PHPの普通の質問はあっちな、【PHP】質問スレッド Part8
 http://pc2.2ch.net/test/read.cgi/php/1050249148/l50
■PHPへ移行したいPerl信者はあっちな、【待望】PerlユーザのためのPHP入門
 http://pc2.2ch.net/test/read.cgi/php/1046326634/l50
■マニュアル嫁ってうるさいのがいるからちょっとは嫁な、
 http://www.php.net/manual/ja/
■おまえ初心者なら入門本くらいかっとけな、PHP関連の書籍(但しPHP出版系お断り)
 http://pc2.2ch.net/test/read.cgi/php/985315574/l50
■これはなズープスと読むらしいがあっちな、XOOPS
 http://pc2.2ch.net/test/read.cgi/php/1031736248/l50

でもな、ここで書きたかったらここで書き。 あとは関連な、>>2 
0175nobodyさん03/06/22 16:23ID:???
↑
172じゃなくて 173だった。
0176nobodyさん03/06/22 19:07ID:???
>>172
書きこんだ後リダイレクトする
0177影03/06/22 21:01ID:???
>>168-169
サンクスコ

<table border=1>
<td>ほげ1
</td>
</tr>
<tr>
<td>ほげ2
</td>
<td>ほげ3
</td>
<td>ほげ4
</td>
<td>ほげ5
</td>
<td>ほげ6
</td>
</tr>
<tr>
<td>ほげ7
</td>
<td>ほげ8
</td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>

てな具合に、最初の行が上手く動作してくれないんだけど、原因が見当つかない
0178PHPDQN03/06/22 22:40ID:???
>>169
×if ($key % (NUMCOLS - 1) == 0) {
○if ($key % NUMCOLS - 1 == 0) {
◎if ($key % NUMCOLS == 1) {
$key == 0 の時にもTRUEになるためには一番上が必要でした
0179影03/06/23 04:05ID:???
>>169
foreach ($hoge as $key=>$val) {
if ($key == 0) {
echo "<tr>"."\n";
}elseif ($key % NUMCOLS == 1) {
echo "<tr>"."\n";
}
とか、やってもダメですた・・・(ウトゥ
<table border=1>
<tr>
<td>ほげ1
</td>
</tr>
<tr>
<td>ほげ2〜
最初の<tr>が出現したのみ。

1行目だけなんで・・・(つД`)
0180 03/06/23 04:06ID:vjy3Tk6s
すごいねここ
http://strangeworld-honten.com/cgi-bin/bbs.cgi
0181nobodyさん03/06/23 04:12ID:???
ブラウザークラッシュ!!
0182あぼーんNGNG
あぼーん
0183PHPDQN03/06/23 04:23ID:???
>>179
foreach ($hoge as $key=>$val) {
if ($key % (NUMCOLS - 1) == 0) {
echo "<tr>"."\n";
} elseif ($key % NUMCOLS == 1) {
echo "<tr>"."\n";
}
0184あぼーんNGNG
あぼーん
0185影03/06/23 08:30ID:???
あ゛〜(`□´)
背中に手が届きそうで届かない!
漏れにプログラムは向いてないんか!?

>>183
それだと、$key が 8 になった時も
if ($key % (NUMCOLS - 1) == 0) にマッチして<tr>が出てくるべさ。
するとテーブルが崩れてしまうべさ。
昨日>>168見た時は、サパーリだったけど、今は何をどうしたらいいかが
解ってきたような気がする・・・

後は、何とか自力で・・・出来たらいいなぁ〜(´¬`)
ところで、今回は定数に5を代入してるけど、これ変数じゃだめぽ?
あっ、NUMCOLS-1 とかしてるから変数じゃマズイか・・・

yata-でけた〜!!!!!!
0186影03/06/23 08:32ID:???
define("NUMCOLS",5); // 列の数
reset($hoge);
echo "<table border=1>"."\n";
foreach ($hoge as $key=>$val) {
if ($key == 0) {
echo "<tr>"."\n";
} elseif ($key % NUMCOLS == 0) {
echo "<tr>"."\n";
}
echo "<td>".$val."</td>"."\n";
if ($key % NUMCOLS == 4) {
echo "</tr>"."\n";
}
}
$n = count($hoge) % NUMCOLS;
if ($n > 0) {
for ($i = 0; $i < NUMCOLS-$n; $i++) {
echo "<td> </td>"."\n";
}
echo "</tr>"."\n";
}
echo "</table>"."\n";
0187PHPDQN03/06/23 11:27ID:???
>>185
そうだね
じゃあ
if ($key == 0 || $key % NUMCOLS == 1) {
0188影03/06/23 12:41ID:???
それだ!論理和 || !

$key % NUMCOLS == 1
だと、$key が、1,6,11・・・の時にマッチしてしまい、出したい所に<tr>が出ない。
なのでやっぱりここは
$key % NUMCOLS == 0
if ($key % NUMCOLS == 4)
の部分は、5列って事しか考えていなかった為、ちょい修正して
if ($key % NUMCOLS == NUMCOLS-1)
>>169が書いてくれた空セル追加は
for ($i = 0; $i < $n; $i++)
だと、例えば余剰が4の時は、4つ空セルを作ってしまう。
空セルは列の数から余剰を引いた分だけ欲しいので、
for ($i = 0; $i < NUMCOLS-$n; $i++)

こんな厨な漏れに付き合って下さった PHPDQN 様、ありがとうございました!
0189影03/06/23 12:43ID:???
最終的には、こうなりますた。

$filename = "test.log";
$hoge = file ($filename);

define("NUMCOLS",5); // 列の数
reset($hoge);
echo "<table border=1>"."\n";
foreach ($hoge as $key=>$val) {
if ($key == 0 || $key % NUMCOLS == 0) {
echo "<tr>"."\n";
}
echo "<td>".$val."</td>"."\n";
if ($key % NUMCOLS == (NUMCOLS-1)) {
echo "</tr>"."\n";
}
}
$n = count($hoge) % NUMCOLS;
if ($n > 0) {
for ($i = 0; $i < NUMCOLS-$n; $i++) {
echo "<td> </td>"."\n";
}
echo "</tr>"."\n";
}
echo "</table>"."\n";
0190nobodyさん03/06/23 16:28ID:???
$c = count($hoge);
$c += $c % 5
for ($i = 0, $j = 0, $td = '', $tr = ''; $i < $c; $i++, $j++) {
$v = isset($hoge[$i]) ? $hoge[$i] : " ";
$td .= sprintf("<td>%s</td>", $v);
if ($j == 4) {
$tr .= sprintf("<tr>%s</tr>", $td);
$j = -1;$td = '';
}
}
printf("<table>$s</table>", $tr);
0191nobodyさん03/06/23 17:00ID:ghLrcRD3
php 4.2.3 を使っています。
ヒアドキュメントに関して教えて欲しいのですが、
ヒアドキュメント内に、式、というか関数を書き、その結果を
使いたいのですが、うまくいきません。

$buf = <<<EOD;
a = {$db->query($_POST['a'])},
b = ### 以下同じように...
EOD;

のような感じに書き、print $buf; で

a = 値, b = 値 となるようにしたいのですが、

Parse error: parse error, expecting `'}'' in ...

となってしまいます。ヒアドキュメントではなくて、

$buf .= "a = ".$db_con->quote($_POST['a']).",";

と続けていくしかないでしょうか?
0192影03/06/23 19:16ID:???
$buf = <<<EOD;
↑この行ってセミコロンいるんですか?
019319103/06/23 19:22ID:ghLrcRD3
>> 192
すみません。手コピーした時にミスりました。
セミコロンいらないです。

書き写しをミスっただけなので、セミコロンは本質的な
問題じゃありません。すみませんです。
0194影03/06/23 19:33ID:???
a = {$db->query($_POST['a'])},
a → $a
, → ;

今の漏れにはこれくらいしかミスがハケーンできず。
あとは、偉い人よろ。
0195nobodyさん03/06/23 20:41ID:???
>>191

$buf = <<<EOD
EOD;
~ このセミコロンはだめだと思うが?
EOD
;
こうだろ。

$buf = <<<EOD;
EOD
でも良いとおもうが
0196nobodyさん03/06/23 20:49ID:???
セミコロンの位置に関しては>>192が正解。
つーかそれ以前にヒアドキュメント内には関数を書けんわけだが。
「以下同じように」なことをしたいんならwhile、for、foreachのどれかでしょ。
0197影03/06/23 20:58ID:???
>>191
スマソ、漏れの発言(>>194)は全部忘れて。
019819103/06/23 21:05ID:???
>>196 ヒアドキュメント内には関数を書けんわけだが。
ども。書けない事がわかったのでヒアドキュメントを使うのを
やめられます(^^;

>>194, 197
いえいえ。アクションを起してもらえた事がうれしいので、
感謝しています。ありがとう。
0199nobodyさん03/06/23 23:30ID:???
>>198
echo やprintの中でもかけないよ
当たり前だけど
0200nobodyさん03/06/24 00:57ID:???
200
0201nobodyさん03/06/24 03:00ID:/ljDW6SS
ゲストブックは作れるけど、
返信機能も付けたい・・・↓
ttp://blue.ribbon.to/~goonet/pppbbs.php
どうしたらいいですか?
0202nobodyさん03/06/24 03:21ID:???
保守
アホな質問であっても詳しく質問しろよ。 ネタはおもしろく書けよ。
0203nobodyさん03/06/24 12:56ID:bE/a8saZ
$before = array('aaa','AAA','bbb','BBB');
$after = array('aaa'=>'AAA','bbb'=>'BBB');
上の配列を下配列に変換するにはどうしたら良いでしょうか。

クラスの中でコールバックする時にクラス内の関数を指定するには
どうしたらよいですか?
class::function,$this->functionともにダメでした。
0204PHPDQN03/06/24 19:27ID:???
>>203
> $before = array('aaa','AAA','bbb','BBB');
> $after = array('aaa'=>'AAA','bbb'=>'BBB');
> 上の配列を下配列に変換するにはどうしたら良いでしょうか。

$i = 1;
foreach ($before as $key=>$val) {
if ($i % 2 == 1) {
$hoge = $val;
} else {
$after[$hoge] = $val;
}
$i ++;
}
> クラスの中でコールバックする時にクラス内の関数を指定するには
> どうしたらよいですか?
> class::function,$this->functionともにダメでした。

class::function()
$this->function()
0205nobodyさん03/06/25 11:50ID:???
>>203
function arrayToHash ($array) {
 if (!is_array($array)) return false;
 $hash = array();
 $m = count($array);
  for ($n=0;$n<$m;$n++) {
   if ($n % 2) {
    $hash[$array[($n-1)]] = $array[$n];
   } else {
    $hash[$array[$n]] = "";
   }
 }
 return $hash;
}
こんなかんじかな?なんとなくだけどもっと良い方法が在るかも

クラス内でのコールバック関数を使うんだったら、create_function()を使うか
array($this,'method_name')でソメッドを指定してやること
ttp://jp.php.net/manual/ja/function.preg-replace-callback.php
を見れば参考になるよ(Notesのところもね)
0206nobodyさん03/06/25 12:13ID:TNz4QTlp
関数内でグローバル変数にリファレンスを代入したときの挙動がよく分からないのですが、
$a=array(1,2,3);
$b;
hoge();
piyo();
function hoge(){
  global $a,$b;
  $b = &$a;
  var_dump($b);
}
function piyo(){
  global $a,$b;
  var_dump($b);
}
でpiyoのdumpがNULLなのはなぜですか?
0207nobodyさん03/06/25 15:15ID:RiMKFAt2
sessionについて学んでおります。
サンプルソースより、多々のサイトを閲覧し意味を求めているのですが、
解釈があっているかどうか・・・

session_name('2ch_session');
セッション名ですよね?

session_cache_limiter('nocache');
ページをキャッシュをさせるかどうかの意味だと思うのですが、
public、nocache、privateの違いがいまいちわかりません。

session_cache_expire(30);
limiterでキャッシュする場合、30分とかという
時間の長さですよね

session_start();
ここからセッションが始まる



何冊か本を購入したのですが、sessionのやり方は書いてあっても、
サンプルスクリプトなどにsession_cache_limiter();
などど唐突に書いてあり、意味の解説がなされてありませんので、
自分ながらに解釈してみました。どこが間違っているでしょうか?
0208nobodyさん03/06/25 16:10ID:???
なんでマニュアル読もうとしないのだろうか?
実はマニュアルは存在しない、私の想像の産物に過ぎないのであろうか・・・
この理不尽な質問にもそう考えるとすべての辻褄が合う。
0209nobodyさん03/06/25 16:36ID:???
>>208
そんな事、たらたら書くんだったら教えてあげ。
http://jp.php.net/manual/ja/ref.session.php

おい、207これでわかるか?分かんなかったらまた質問し。
0210nobodyさん03/06/25 16:39ID:+bFcwMX4
>>208
マニュアルのまんまの参考書って多いよね。
マニュアルのほうが分かりやすいし、最新、タダなのにねぇ。感謝>doc.group

>なんでマニュアル読もうとしないのだろうか?
考えられる理由は、マニュアルのトップページ見ても
1) XCIIIセッション処理関数(session)
に辿り着く前に面倒になる
2) search for [ ] in the [function list]
の英語が分からない
3) 2)の submit ボタン が 分かりづらい

4) manual の 存在に気づいてない
& このスレの最初すら読んでない
& 基礎からやるのはダルイ

ぐらいかな。
0211ereg質問者03/06/25 17:12ID:???
eregについて調べているのですが、
本を見ただけではわからないので質問させて下さい。
現在あるソースを見ながら何をしているのかを調べているのですが、
eregを使っている部分で分からなくなってしまうので
解説してもらえないでしょうか?
具体的には以下のようなコードが書かれています。
------------------------------------------------
ereg( "([0-9]{1,2}) (.+)", $ini_file, $regs ) )
ereg( "\*", $regs[2])
ereg_replace( "\*", "", $regs[2] )
ereg_replace( "\*", "(.*)", $regs[2] )
ereg("\"[EGOPS]{2,3}T ".$ini[$ii][1]."(.*) HTTP", $file, $regs)
ereg( $param[$ss], $log_url )

eregの部分だけなので繋がりがなく分かりずらいと思いますが
よろしくお願いします。
0212nobodyさん03/06/25 17:20ID:???
>206
3行目で $b に値が設定されていないから。アホか。
しかしスコープ間でリファレンスを受け渡しする際の挙動制御は確かにややこしいと思う。

http://www.php.net/manual/ja/language.variables.scope.php
http://www.php.net/manual/ja/language.references.spot.php#references.global
と、01-Aug-2001 05:07 の補足。
( http://www.php.net/manual/ja/migration4.variables.php )
( http://www.php.net/manual/ja/language.references.unset.php )

>208
ある程度phpに習熟しているのにマニュアルを読まない者が何割か残り続けるところからすると、
マニュアルを読むのにはいくつか「慣れ」が必要なポイントがあると思う。
慣れれば利用は易いが、慣れることができなかった場合はその先もずっと読まない。
マニュアルはphpに残った最後の敷居か。
0213あぼーんNGNG
あぼーん
0214nobodyさん03/06/25 17:37ID:???
関数内でのグローバル変数に対する値の変更はその関数内でしか有効にならないのですか?
0215nobodyさん03/06/25 17:39ID:+bFcwMX4
>[EGOPS]{2,3}T
ふいてしまったじゃないか!
021621203/06/25 18:04ID:???
>214
ユーザ定義関数の内から直接グローバルスコープの変数にはアクセスできないが、
global宣言をしていれば、グローバルスコープでも変更が反映される。
global宣言は分かると思うけど、関数内(ローカルスコープ)の変数に
グローバルスコープの変数へのリファレンスを渡すもの。
( マニュアルいわく、global $a; は $a =& $GLOBALS['a']; と同義 )

同じように、ローカルスコープで作られた変数はグローバルスコープからは変更できない。
この場合はstatic宣言をすると、グローバルスコープへ関数内の変数を持ち出すことが出来る。

ただ、>206の人がはまってるように、ローカルスコープ(関数内)で作られたリファレンスは
static宣言してもグローバルスコープへは持ち出せない。関数処理が終われば消滅。

そのような感じ。
0217nobodyさん03/06/25 18:26ID:???
このスレ212は漏れなんだが
まあ間々あることか、、
0218あぼーんNGNG
あぼーん
0219あぼーんNGNG
あぼーん
0220nobodyさん03/06/25 19:40ID:???
ヒアドキュメントの中で定数の値を出力する方法を
教えて頂けませんか?
0221nobodyさん03/06/25 21:09ID:???
>>220
定数なら直に書けば?
0222nobodyさん03/06/26 02:14ID:ZsWdiO4a
mb_convert_kanaを使うと????となってしまうんだけど、なんで??
0223nobodyさん03/06/26 02:21ID:???
>>221
あんたプログラムで定数を使ったことないのか?
0224nobodyさん03/06/27 01:13ID:???
>>222
変換できなかったから
022520703/06/27 02:26ID:GX1Z4uke
皆様のおっしゃるとおりです。
マニュアルを熟知しました。
その上で質問です。

セッション変数にデータを追加する際、
session_start();
session_register("user_id");
$user_id = "giko";
をヘッダに使用すると、別のページでも、user_idに格納された
データを使うことができますが、

本に書いてあったのは、
session_start();
$user_id = "giko";
$_SESSION["user_id"] = "user_id";
とあり、
$_SESSIONは4.1.0から追加された配列です。とあります。
                     ~~~~~
$_SESSIONで、PHPマニュアルで探したのですが、ちょっと見つけることができませんでした。

ということは、少量の変数を用いる際は、上の例で、
配列を使いたいときは、下の例でいいということなんでしょうね・・・

なんか、まだ自信がないのですが、
推奨とかありますか?
0226とも03/06/27 02:34ID:8zlvqcC5
みてね〜♪
http://www1.free-city.net/home/s-rf9/page005.html
0227nobodyさん03/06/27 02:49ID:???
ブラウザークラッシュ”
022820703/06/27 02:58ID:???
>>225
自己レスです。


http://jp.php.net/manual/ja/ref.session.php
に普通に乗っていました。
グローバル変数として扱えるのですね。

検索の仕方が悪かったようで。

すいませんでした。
0229nobodyさん03/06/27 05:44ID:???
いわゆる「パン屑リスト」のうまい処理のしかた求む。
0230あぼーんNGNG
あぼーん
0231あぼーんNGNG
あぼーん
0232あぼーんNGNG
あぼーん
0233nobodyさん03/06/27 11:18ID:oE4Jdn/I
ファイル一覧のソート方法を教えてください。
単純に、ファイル名(日付になっています)に並べたいです。

以下の方法で一覧を表示したときに何順にならんでいるのでしょうか。
当方の確認した環境では、全く順不同でした…

while ( $filename = ReadDir( $handlerDir ) ) {
if ( $filename != '.' && $filename != '..' ) {
print $filename;
}
}

よろしくです。
0234あぼーんNGNG
あぼーん
0235nobodyさん03/06/27 11:48ID:9q2Y1uRy
>>233
#いったん配列に入れて
if ( $filename != '.' && $filename != '..' ) {
$files[] = $filename;
}
#ソートする
sort($files);
#ポインタを先頭に
reset($sort);
#表示
foreach($files as $filename) {
print $filename."<br>\n";
}
0236nobodyさん03/06/27 13:37ID:oE4Jdn/I
>>235
ありがとうございます。
大変参考になりました。
0237あぼーんNGNG
あぼーん
0238あぼーんNGNG
あぼーん
0239あぼーんNGNG
あぼーん
0240nobodyさん03/06/27 23:59ID:???
ブラクラ注意
0241nobodyさん03/06/28 08:30ID:WrETl/ge
mkdirでフォルダを作ってそのフォルダを開きたいんですけど、
Warning: SAFE MODE Restriction in effect. The script whose uid is 〜
というエラーが出てしまいます。
FTPで最初からフォルダを作っておくとちゃんと出来ます。
どうすればよいんでしょうか。
0242nobodyさん03/06/28 09:31ID:???
>>241
safe modeをoffにする。
0243nobodyさん03/06/28 10:05ID:???
define は処理の途中で使ってもOKですか?
0244nobodyさん03/06/28 10:58ID:???
初心者はやってもいないのに「〜はできますか?」って聞いてくる。
まずはやってみれ。もちろんローカルで。
0245nobodyさん03/06/28 12:09ID:???
>>244
知ったか君はは試したこともなくてどうなるか自分も解らないのに「試してみろ」って言ってくる。
お前もまずはやってみれ。後学のために。もちろんローカルで。
0246!24403/06/28 12:56ID:???
自分で試したほうがはやいことをいつレスが付くかわからん掲示板で
訊くって言う発想がよくワカランなぁ。
余計にマンドクサくね?

>>245
>自分も解らないのに
ってのは分かんないじゃん
>>243が何にも試してないんだろうなって臭いはプンプンするが。

そもそもマヌアルにはdefine()の使いどころの注意書きは見当たらないけど、
心配しだす動機は何なんだろ
テスト環境用意してないのかな?
いちいちマヌアルに書いてない事まで心配しだしたらコーディング進まねーYO!

俺は安全な環境で誤動作上等って感じでコード書きまくってからテストしてる。
やっちゃダメな事はローカルで実体験しまくった方が身によく付くYO

#まだPHP弄りだしたばかりで、PHPで定数使ったことねぇんだけど
#適当なソースにdefine()とその定数をechoする行追加してみたけど
#何の問題もなさそうだたーよ
0247nobodyさん03/06/28 13:03ID:Fh1b8anl
>>246
>>224よ、お前が歯を食いしばって釣りを無視しているにもかかわらず、何か豪勢なのが釣れてるんだが・・・
024824603/06/28 13:06ID:???
俺なりのマジレスしてみたんだがなぁ
何か無粋なやっちゃな
釣りとか釣られたとかくだらねー
024924303/06/28 14:17ID:???
>>246
ありがとうございます。
define は処理を始める前に羅列するような先入観があり、
文法的に変なような気がしていましたので。
025022103/06/28 16:28ID:???
>>223
いやー>>220が頓珍漢な事を言ってるから
こちらも頓珍漢な答えで茶化したわけだが
何故無理してまでヒアドキュメント使おうとするのかわからん
まぁたしかにタチ悪かったねスマン
0251nobodyさん03/06/28 16:49ID:???
>>246=>>248=>>250
025224603/06/28 17:47ID:???
>>251
>>250と結びつける意味がワカラン
ますますくだらねー
ただでさえジメジメしてうっとおしい時期なんだからさ
そういうジメジメしたカキコはやめようや

>>249
定数とかは分かりやすい場所に書いたほうが良いよ
ファイルの前の方とか、定数だけ書いたファイルをインクルードするとか
散在してると後で見つけにくくなるから

後、繰り返しになるけど、コードの落とし穴とかは(テスト環境で)実体験しといた方が楽だよ
ちょっとした疑問程度なら自ら動かしてみてくらはい
見聞きしただけでバグ無しコード書けるくらいに頭の回転がはやい人なら別だろうけど
0253nobodyさん03/06/28 18:47ID:???
>>252
まぁ、ネームスペースとかに興味がない人はそう思うんでしょうな。
0254nobodyさん03/06/29 01:35ID:???
PHPって定数にネームスペースの概念ってあったっけ?
列挙型とか。
0255nobodyさん03/06/29 14:32ID:rZczdmH2
質問!
フォームから入力したテキストに[\](バックスラッシュ)が
入ってしまうんです.
調べて[magic_quotes_gpc]の値を[ini_set]でOFFにすればいいと
いうのがわかったのですがこれでも回避されませんでした.
しかたなしに[stripslashes]で回避しているのですが
もっと根本的に直せないでしょうか?
ちなみに[magic_quotes_runtime][magic_quotes_sybase]の
値も全てOFFです.
0256PHPDQN03/06/29 14:39ID:???
>>255
SJIS?
025725503/06/29 15:52ID:rZczdmH2
デフォルトでは[Shift-JIS]の出力だったので
ini_set('mbstring.http_output', "EUC-JP");
を実行して[EUC-JP]に変換しています.
この辺が怪しいですか?
0258nobodyさん03/06/29 17:08ID:???
>>257
stripslashes
0259nobodyさん03/06/29 17:10ID:???
>>255
再起動した?
026025503/06/29 17:21ID:rZczdmH2
[ini_set]でやってるので再起動なしに反映されてます.
[stripslashes]で回避はできますができれば根本から
直したいです.
0261nobodyさん03/06/29 17:49ID:???
おいらのまぬあるが古いのかな?
ini_setでmagic_quote_gpcは設定できないように書いてあるようにみえる。
0262nobodyさん03/06/29 20:30ID:???
>>261
合ってるよ(一応PHP4.3.2のソースでも確認)
http://jp.php.net/manual/ja/ref.info.php#ini.magic-quotes-gpc
で、PHP_INI_PERDIRとPHP_INI_SYSTEMなので
http://jp.php.net/manual/ja/function.ini-set.php
の説明どおり、スクリプトの中のini_set()では変更できない。
0263nobodyさん03/06/29 22:53ID:???
http://jp.php.net/ini_set
261あってるね。
026425503/06/30 00:28ID:8Khs5mrJ
ありがとうございます.m(_ _)m
書き忘れてましたがPHP4.1.2です.
再起動しないとだめなんですね…
でも
ini_set('magic_quotes_gpc', 0);
phpinfo();
をやるとちぇんとLocal ValueではOFFに
なってるんですがこれはあくまで設定値ということなんですね…
ありがとうございました.
026525503/06/30 00:32ID:8Khs5mrJ
ついでに利かせてもらうと
レンタルサーバの場合などみなさん
どうしているんでしょうか?
いちいち[stripslashes]の処理をさせてるんでしょうか?
0266nobodyさん03/06/30 00:48ID:???
まぁ、ケースバイケースだけど
俺はこんな感じのことをしてます。
---------
if (get_magic_quotes_gpc() == 1) {
  switch ($_SERVER["REQUEST_METHOD"]) {
    case "POST":
      while (list($key, $val) = each($_POST)) {
        if (! is_array($val)) {
          $_POST[$key] = stripslashes($val);
        }
      }
      break;

    case "GET":
      while (list($key, $val) = each($_GET)) {
        if (! is_array($val)) {
          $_GET[$key] = stripslashes($val);
        }
      }
      break;
  }
}
0267nobodyさん03/06/30 01:50ID:???
$_GET = array_map('stripslashes', $_GET);
$_POST = array_map('stripslashes', $_POST);
$_COOKIE = array_map('stripslashes', $_COOKIE);
これ最強。
0268nobodyさん03/06/30 01:56ID:???
念のため、再帰的に変換するのもあり。
$_GET = array_map('r_stripslashes', $_GET);

function r_stripslashes($value) {
if (is_string($value)) {
$value = stripslashes($value);
} elseif (is_array($value)) {
$value = array_map('r_stripslashes', $value);
}
return $value;
}
026926603/06/30 02:48ID:???
なるほど・・・勉強になりますた
0270nobodyさん03/06/30 04:09ID:8KMUcild
文字列の中にあるスペース削除ってどうやるの?
0271あぼーんNGNG
あぼーん
0272nobodyさん03/06/30 04:36ID:???
>>270
str_replace
0273nobodyさん03/06/30 05:11ID:OSudLwdS
認証システムを作っているんだけど、
アカウント名に、半角英数小文字のみ
abcdefghijklmnopqrstuvwxyz0123456789_-
だけにしたいのです。

フォームから上記以外の文字を入力された場合、
駄目!って言いたいんだけど、
正規表現は難しそうなので、

if ( mb_convert_kana($account,"akh") != $account ) { echo "駄目!!"; }
で行こうと思ったんだけど、
全角の漢字とか、スペースを入力されてしまいそう・・・
記号もたくさん入力されそう・・・

なんかいい方法ありますか?
0274nobodyさん03/06/30 06:52ID:???
>>273
ちょっと分からなくても正規表現やっておくといいと思うよ。

$a がフォームから受け取った文字
ereg("^[a-z0-9_-]+$", $a)

これで期待通りの結果が得られると思うけど、意味は自分で調べるとよろし。


それよりお前ら、PHP5.0.0 Beta1なんてのが表舞台に出てきましたよ。
0275nobodyさん03/06/30 10:12ID:aQ17FmN/
登録された内容をメールで送信しようとしています。
EUCで書かれたファイルで作成するので

$line = mb_convert_encoding($line,"ISO-2022-JP","EUC-JP");
$subject = mb_convert_encoding($subject,"ISO-2022-JP","EUC-JP");
mail($mail,$subject,$line,"From: [email protected]\r\nReply-To: [email protected]");
としています。

送られてきたメールを見るとタイトルは文字化けしているのですが、
メッセージの方は問題無く表示されています。
なにが問題なのでしょう。
■ このスレッドは過去ログ倉庫に格納されています