【PHP】初心者コーナー 3 Released【スローモード】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/11 06:24ID:???ファイル 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
0202nobodyさん
03/06/24 03:21ID:???アホな質問であっても詳しく質問しろよ。 ネタはおもしろく書けよ。
0203nobodyさん
03/06/24 12:56ID:bE/a8saZ$after = array('aaa'=>'AAA','bbb'=>'BBB');
上の配列を下配列に変換するにはどうしたら良いでしょうか。
クラスの中でコールバックする時にクラス内の関数を指定するには
どうしたらよいですか?
class::function,$this->functionともにダメでした。
0204PHPDQN
03/06/24 19:27ID:???> $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:???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_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:???そんな事、たらたら書くんだったら教えてあげ。
http://jp.php.net/manual/ja/ref.session.php
おい、207これでわかるか?分かんなかったらまた質問し。
0210nobodyさん
03/06/25 16:39ID:+bFcwMX4マニュアルのまんまの参考書って多いよね。
マニュアルのほうが分かりやすいし、最新、タダなのにねぇ。感謝>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( "([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:???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あぼーん
NGNG0214nobodyさん
03/06/25 17:37ID:???0215nobodyさん
03/06/25 17:39ID:+bFcwMX4ふいてしまったじゃないか!
0216212
03/06/25 18:04ID:???ユーザ定義関数の内から直接グローバルスコープの変数にはアクセスできないが、
global宣言をしていれば、グローバルスコープでも変更が反映される。
global宣言は分かると思うけど、関数内(ローカルスコープ)の変数に
グローバルスコープの変数へのリファレンスを渡すもの。
( マニュアルいわく、global $a; は $a =& $GLOBALS['a']; と同義 )
同じように、ローカルスコープで作られた変数はグローバルスコープからは変更できない。
この場合はstatic宣言をすると、グローバルスコープへ関数内の変数を持ち出すことが出来る。
ただ、>206の人がはまってるように、ローカルスコープ(関数内)で作られたリファレンスは
static宣言してもグローバルスコープへは持ち出せない。関数処理が終われば消滅。
そのような感じ。
0217nobodyさん
03/06/25 18:26ID:???まあ間々あることか、、
0218あぼーん
NGNG0219あぼーん
NGNG0220nobodyさん
03/06/25 19:40ID:???教えて頂けませんか?
0222nobodyさん
03/06/26 02:14ID:ZsWdiO4a0225207
03/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:8zlvqcC5http://www1.free-city.net/home/s-rf9/page005.html
0227nobodyさん
03/06/27 02:49ID:???0228207
03/06/27 02:58ID:???自己レスです。
http://jp.php.net/manual/ja/ref.session.php
に普通に乗っていました。
グローバル変数として扱えるのですね。
検索の仕方が悪かったようで。
すいませんでした。
0229nobodyさん
03/06/27 05:44ID:???0230あぼーん
NGNG0231あぼーん
NGNG0232あぼーん
NGNG0233nobodyさん
03/06/27 11:18ID:oE4Jdn/I単純に、ファイル名(日付になっています)に並べたいです。
以下の方法で一覧を表示したときに何順にならんでいるのでしょうか。
当方の確認した環境では、全く順不同でした…
while ( $filename = ReadDir( $handlerDir ) ) {
if ( $filename != '.' && $filename != '..' ) {
print $filename;
}
}
よろしくです。
0234あぼーん
NGNG0235nobodyさん
03/06/27 11:48ID:9q2Y1uRy#いったん配列に入れて
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ありがとうございます。
大変参考になりました。
0237あぼーん
NGNG0238あぼーん
NGNG0239あぼーん
NGNG0240nobodyさん
03/06/27 23:59ID:???0241nobodyさん
03/06/28 08:30ID:WrETl/geWarning: SAFE MODE Restriction in effect. The script whose uid is 〜
というエラーが出てしまいます。
FTPで最初からフォルダを作っておくとちゃんと出来ます。
どうすればよいんでしょうか。
0243nobodyさん
03/06/28 10:05ID:???0244nobodyさん
03/06/28 10:58ID:???まずはやってみれ。もちろんローカルで。
0245nobodyさん
03/06/28 12:09ID:???知ったか君はは試したこともなくてどうなるか自分も解らないのに「試してみろ」って言ってくる。
お前もまずはやってみれ。後学のために。もちろんローカルで。
0246!244
03/06/28 12:56ID:???訊くって言う発想がよくワカランなぁ。
余計にマンドクサくね?
>>245
>自分も解らないのに
ってのは分かんないじゃん
>>243が何にも試してないんだろうなって臭いはプンプンするが。
そもそもマヌアルにはdefine()の使いどころの注意書きは見当たらないけど、
心配しだす動機は何なんだろ
テスト環境用意してないのかな?
いちいちマヌアルに書いてない事まで心配しだしたらコーディング進まねーYO!
俺は安全な環境で誤動作上等って感じでコード書きまくってからテストしてる。
やっちゃダメな事はローカルで実体験しまくった方が身によく付くYO
#まだPHP弄りだしたばかりで、PHPで定数使ったことねぇんだけど
#適当なソースにdefine()とその定数をechoする行追加してみたけど
#何の問題もなさそうだたーよ
0248246
03/06/28 13:06ID:???何か無粋なやっちゃな
釣りとか釣られたとかくだらねー
0250221
03/06/28 16:28ID:???いやー>>220が頓珍漢な事を言ってるから
こちらも頓珍漢な答えで茶化したわけだが
何故無理してまでヒアドキュメント使おうとするのかわからん
まぁたしかにタチ悪かったねスマン
0252246
03/06/28 17:47ID:???>>250と結びつける意味がワカラン
ますますくだらねー
ただでさえジメジメしてうっとおしい時期なんだからさ
そういうジメジメしたカキコはやめようや
>>249
定数とかは分かりやすい場所に書いたほうが良いよ
ファイルの前の方とか、定数だけ書いたファイルをインクルードするとか
散在してると後で見つけにくくなるから
後、繰り返しになるけど、コードの落とし穴とかは(テスト環境で)実体験しといた方が楽だよ
ちょっとした疑問程度なら自ら動かしてみてくらはい
見聞きしただけでバグ無しコード書けるくらいに頭の回転がはやい人なら別だろうけど
0254nobodyさん
03/06/29 01:35ID:???列挙型とか。
0255nobodyさん
03/06/29 14:32ID:rZczdmH2フォームから入力したテキストに[\](バックスラッシュ)が
入ってしまうんです.
調べて[magic_quotes_gpc]の値を[ini_set]でOFFにすればいいと
いうのがわかったのですがこれでも回避されませんでした.
しかたなしに[stripslashes]で回避しているのですが
もっと根本的に直せないでしょうか?
ちなみに[magic_quotes_runtime][magic_quotes_sybase]の
値も全てOFFです.
0257255
03/06/29 15:52ID:rZczdmH2ini_set('mbstring.http_output', "EUC-JP");
を実行して[EUC-JP]に変換しています.
この辺が怪しいですか?
0260255
03/06/29 17:21ID:rZczdmH2[stripslashes]で回避はできますができれば根本から
直したいです.
0261nobodyさん
03/06/29 17:49ID:???ini_setでmagic_quote_gpcは設定できないように書いてあるようにみえる。
0262nobodyさん
03/06/29 20:30ID:???合ってるよ(一応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:???261あってるね。
0264255
03/06/30 00:28ID:8Khs5mrJ書き忘れてましたがPHP4.1.2です.
再起動しないとだめなんですね…
でも
ini_set('magic_quotes_gpc', 0);
phpinfo();
をやるとちぇんとLocal ValueではOFFに
なってるんですがこれはあくまで設定値ということなんですね…
ありがとうございました.
0265255
03/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:???$_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;
}
0269266
03/06/30 02:48ID:???0270nobodyさん
03/06/30 04:09ID:8KMUcild0271あぼーん
NGNG0273nobodyさん
03/06/30 05:11ID:OSudLwdSアカウント名に、半角英数小文字のみ
abcdefghijklmnopqrstuvwxyz0123456789_-
だけにしたいのです。
フォームから上記以外の文字を入力された場合、
駄目!って言いたいんだけど、
正規表現は難しそうなので、
if ( mb_convert_kana($account,"akh") != $account ) { echo "駄目!!"; }
で行こうと思ったんだけど、
全角の漢字とか、スペースを入力されてしまいそう・・・
記号もたくさん入力されそう・・・
なんかいい方法ありますか?
0274nobodyさん
03/06/30 06:52ID:???ちょっと分からなくても正規表現やっておくといいと思うよ。
$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]");
としています。
送られてきたメールを見るとタイトルは文字化けしているのですが、
メッセージの方は問題無く表示されています。
なにが問題なのでしょう。
0276255
03/06/30 10:31ID:JZyVHkmBありがとうございます!
m(_ _)m
べんきょうになりますな.
0278275
03/06/30 11:00ID:???mail()の個所をmb_send_mail()と変更しただけで、
mb_send_mail()を使用しましたが、
届いたメールは件名はあるがメッセージ自体が無い状態で届いてしまいました。
これもまたなぜなんでしょう。
0280275
03/06/30 11:35ID:???操作自体も同じですし。
0282nobodyさん
03/06/30 12:26ID:???$subject = mb_convert_encoding($subject,"SJIS","EUC");
$subject = '=?ISO-2022-JP?B?'.base64_encode($subject).'?=';
してから、mail関数で送信してみ
0284nobodyさん
03/06/30 16:01ID:???fileで読み込むと全行読み込むから効率が悪いと思うのです。
0285あぼーん
NGNG0286nobodyさん
03/06/30 17:43ID:???0288あぼーん
NGNG0289nobodyさん
03/06/30 22:15ID:???0290nobodyさん
03/07/01 11:51ID:???0292nobodyさん
03/07/01 21:20ID:???Shift-JISのファイルをEUCに変換できますか?
↓みたいなやつ作ったんですけど、データファイルがShift-JISだったんで読み込めない(汗
<?php
$data = file ("$file");
print $data;
?>
0293nobodyさん
03/07/01 22:15ID:???mb_convert_encoding(文字列,出力文字コード,入力文字コード)
で文字列ごとに変換しないとだめなのかも
PHPはじめて10日くらいなので詳しくは知りませんが
0295nobodyさん
03/07/01 22:26ID:???"送信"を押しても何も表示されません。
どこが悪いのか・・・
<FORM action="<?php echo($_SERVER["PHP_SELF"]) ?>" method="POST">
なまえ:<INPUT type="text" name="yourname"><br>
<input type="submit" name="SUBMIT" value="送信"> <input type="reset" name="reset" value="リセット">
</FORM>
<?php
if ($SUBMIT != "" ) {
echo ($yourname);
}
?>
0297295
03/07/01 22:52ID:???ありがとうございます
>>295はPHP入門という本を参考にしてます
一番やさしそうだったんで買ったんですけど、たしかに内容古いかも
$_REQUESTを使うのかな?
もうちょっと試してみます
0299nobodyさん
03/07/01 23:26ID:???0301295
03/07/02 00:07ID:???echo ($_REQUEST["yourname"]);
}
でようやく出来ました
ありがとうございましたー
■ このスレッドは過去ログ倉庫に格納されています