トップページ⇒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 
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]");
としています。

送られてきたメールを見るとタイトルは文字化けしているのですが、
メッセージの方は問題無く表示されています。
なにが問題なのでしょう。
027625503/06/30 10:31ID:JZyVHkmB
>> 266-268

ありがとうございます!
m(_ _)m
べんきょうになりますな.
0277nobodyさん03/06/30 10:34ID:???
>>275
subjectをエンコードする
またはmb_send_mail()を使う
027827503/06/30 11:00ID:???
ありがとうございます。
mail()の個所をmb_send_mail()と変更しただけで、
mb_send_mail()を使用しましたが、
届いたメールは件名はあるがメッセージ自体が無い状態で届いてしまいました。

これもまたなぜなんでしょう。
0279nobodyさん03/06/30 11:26ID:???
>>278
メッセージのないメールを送ったとしか考えられない
028027503/06/30 11:35ID:???
mailではうまく行くんですよ。
操作自体も同じですし。
028127303/06/30 11:42ID:???
>>274
正規表現めんどくさそうだけど、今日一日やってみます。
ありがとやんす〜

5.0.0Beta1期待!
0282nobodyさん03/06/30 12:26ID:???
>>275
$subject = mb_convert_encoding($subject,"SJIS","EUC");
$subject = '=?ISO-2022-JP?B?'.base64_encode($subject).'?=';
してから、mail関数で送信してみ
028327503/06/30 13:12ID:???
>>282
うまく行きました。
今からどういう処理なのか勉強したいと思います。
ありがとうございました。
0284nobodyさん03/06/30 16:01ID:???
数百行あるテキストファイルから指定した行だけ抜き出すにはどうしたらいいでしょうか?
fileで読み込むと全行読み込むから効率が悪いと思うのです。
0285あぼーんNGNG
あぼーん
0286nobodyさん03/06/30 17:43ID:???
ブラクラ注意
0287PHPDQN03/06/30 19:17ID:???
>>270
preg_replace("/\s/","",$hoge);
0288あぼーんNGNG
あぼーん
0289nobodyさん03/06/30 22:15ID:???
ブラクラ注意
0290nobodyさん03/07/01 11:51ID:???
ブラブラチンコ
0291nobodyさん03/07/01 19:25ID:???
>>284
n行目のファイル先頭からのオフセットを一覧にしたインデックスを作ったらどうか。
0292nobodyさん03/07/01 21:20ID:???
すみません
Shift-JISのファイルをEUCに変換できますか?
↓みたいなやつ作ったんですけど、データファイルがShift-JISだったんで読み込めない(汗

<?php
$data = file ("$file");
print $data;
?>
0293nobodyさん03/07/01 22:15ID:???
>>292

mb_convert_encoding(文字列,出力文字コード,入力文字コード)
で文字列ごとに変換しないとだめなのかも

PHPはじめて10日くらいなので詳しくは知りませんが
0294nobodyさん03/07/01 22:21ID:???
>>293
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);
   }
?>
0296nobodyさん03/07/01 22:31ID:???
>>295
>if ($SUBMIT != "" ) {

新しい本を読みましょう。と。
029729503/07/01 22:52ID:???
>>296
ありがとうございます

>>295はPHP入門という本を参考にしてます
一番やさしそうだったんで買ったんですけど、たしかに内容古いかも

$_REQUESTを使うのかな?
もうちょっと試してみます
0298nobodyさん03/07/01 23:12ID:???
>>297
$HTTP_POST_VARS["SUBMIT"]
0299nobodyさん03/07/01 23:26ID:???
$_POST
0300nobodyさん03/07/01 23:37ID:???
>>297
内容古いのはぜんぜん問題ないよ。とにかく書けよ。
030129503/07/02 00:07ID:???
if ($_REQUEST["SUBMIT"] != "" ) {
  echo ($_REQUEST["yourname"]);
}
でようやく出来ました
ありがとうございましたー
0302nobodyさん03/07/02 00:14ID:???
>>301
あ〜あ・・・
0303nobodyさん03/07/02 01:52ID:???
>>301
まちがっちゃーいないんだけど
$_REQUESTはGETとPOST、COOKIE、FILESを区別しないから
セキュリティーホールになりやすい。
つーかなんで>>299の優しさをふいにするかなあ。
$_POST['SUBMIT'],$_POST['yourname']にしる!
0304nobodyさん03/07/02 06:21ID:???
>>300
>内容古いのはぜんぜん問題ないよ。とにかく書けよ。

ばっちり問題が出てるんだが。アホか?
0305nobodyさん03/07/02 06:21ID:???
>>303
>>298は無視か。死ね。
0306あぼーんNGNG
あぼーん
0307nobodyさん03/07/02 07:06ID:???
>>305
ごめんごめん。でも...それ...古いし。
4.1以降でも非推奨だしPHP5では使えんでしょ?(憶測
スルーしたのは素直に悪かったと思ふ。
0308nobodyさん03/07/02 08:22ID:???
な、なんだってーー!!!!
PHP5では使えなくなるのか・・・
0309nobodyさん03/07/02 15:03ID:iDV7N0wg
eregでマッチした数を得るにはどうしたらよいんでしょうか?
031030903/07/02 15:14ID:???
すんません。出来ました。
0311あぼーんNGNG
あぼーん
0312nobodyさん03/07/02 15:39ID:???
ブラクラ注意
0313K03/07/02 15:55ID:+4nJpvGg
CGIを使ったHPとそうでないHPはどこが違うんですか?
0314あぼーんNGNG
あぼーん
0315あぼーんNGNG
あぼーん
0316nobodyさん03/07/02 20:54ID:???
ブラクラ注意
031730103/07/02 21:24ID:???
>>303
あわわ・・・

ttp://search.net-newbie.com/php/language.variables.predefined.html
↑にもユーザ入力機構によりスクリプトに入力される全ての変数で、 このため、信頼することができません
ってありました。

以後、気をつけます。
0318404.HDML ◆StMXML.EXE 03/07/03 03:55ID:???
>>309

if(ereg(一致条件,評価する変数,$hoge)){ # 眠いので勘弁して
die(count($hoge));
}

一致条件にマッチした箇所が配列として$hogeに入るので、
後は$hogeをcount()関数で数える、という事を思いついた。。
0319nobodyさん03/07/03 04:03ID:???
>>309
preg_match_allならそのままできるんだが
0320nobodyさん03/07/04 00:29ID:WD3uwLUp
linux(赤帽7.3)+PHP4.1を使用しています。

PHPから、linuxの認証を使い回すことは可能でしょうか?
また、その際、パスワードの変更なども可能でしょうか?
0321nobodyさん03/07/04 06:27ID:???
>>320
激しくセキュリティホールな予感。

passwdにSUIDとか立てたら・・・・って立ってるのか。可能っぽいよ。
0322nobodyさん03/07/04 09:14ID:DNjraE66
イメージ関数で画像の減色って出来ますか?
リサイズは出来たんですけど、減色の方法がわかりません・・。
0323nobodyさん03/07/04 14:36ID:???
User-Agentを取得してMysqlのデータベースに蓄積しています。
$headers=getallheaders();
$ua = $headers['User-Agent'];
としています。
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"が欲しいのですが
"Mozilla/4.0"
までしかデータベースに入りません。どうすれば良いのでしょうか。
ローカルで試しています。PHP 4.3.2 Apache/1.3.24
ご教授願います。
0324nobodyさん03/07/04 16:03ID:ykyCw+EL
FlashとPHPで変数をやりとりしたいのですが
PHPからFlashに送るためには
どういう風にスクリプトを書けばいいんでしょう?
Flash側はsendAndLoadなどで送られてきた
データを受け取ることはわかっているのですが
PHPからどう出力すれぱいいのかわかりません。
(例えばecho ($hoge)などで出力するわけじゃないですよね…)

あともうひとつFlashからPHPに変数を送る際に
返り値もなにも受け取らず、ターゲットウインドウもなし
ただ単純に変数を送るだけってことはできるんでしょうか?
sendで送信後に送り先の「〜.php」が開いてしまいます。
↑板違いなFlash含んでて申し訳ないです。
0325nobodyさん03/07/04 16:22ID:???
PHP+MySQLで掲示板とか作って配布しようと思ってるんですが、テーブルのLOCKって必要ですか?
0326nobodyさん03/07/04 16:27ID:???
>>323
フィールドのタイプとか文字数とかどんなクエリで取り出してるとか教えてくれないの?
0327nobodyさん03/07/04 21:18ID:???
Perlから移植したいのですが

$in{'FROM'} =~ s/◆/◇/g;
  if ($in{'FROM'} =~ /#(.+)/){
     my $key = $1;
     my $salt = substr($key."H.", 1, 2);
     $salt =~ s/[^\.-z]/\./g;
     $salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
     $trip = ' ◆</b>' . substr(crypt($key, $salt), -8) . '<b>';


はどうすればよいでしょうか?

$salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;

でつまってしまいました。厨な質問で申し訳ないですがよろしくお願いします
0328nobodyさん03/07/04 21:32ID:???
>>325
読むだけならどうでも良いけど書くなら必須。
0329nobodyさん03/07/04 21:33ID:???
>>327
$salt = strtr($salt,":;<=>?@[\\]^_`","ABCDEFGabcdef");
0330nobodyさん03/07/04 22:14ID:???
ありがとうございます。いい掲示板つくれそうっす
0331nobodyさん03/07/04 22:15ID:2pHtYtXT
ここはphpBBに関する質問は宜しいのでしょうか。
駄目ならすいませんが誘導ください。

phpBBをインストールし、Global Announcement Modというものを新しくインストールしたのですが、なにも項目も追加されてませんし、「重要」トピックなどで投稿しても全てのフォーラムに反映しません。
コレはどうすれば宜しいのでしょうか?
宜しくお願いします
0332名無し03/07/04 22:26ID:P/UD1L9m
ファイルが存在しなければ作成したいだけなのですが、
エラーが出てしまいます。下記の記述で間違っている個所があるのでしょうか?
$file="file.dat";
if(!file_exists($file)){
$fp = @fopen($file,"w") || die("error");
flock($fp,LOCK_EX);
$print="aaa";
fputs($fp,$print);
flock($fp,LOCK_UN);
fclose($fp);
}
ホントに初歩的な質問ですみません。。。
ご回答お願いします。




033332503/07/04 22:31ID:???
>>328
わかりました。WRITEロックかけます
有難うございました
0334nobodyさん03/07/04 23:11ID:???
>332

>$fp = @fopen($file,"w") || die("error");

var_dump($fp); してみてください。
これだと、たぶん $fp がリソースではなくbool型になってる。
正しくは $fp = @fopen($file,"w") or die("error");
こうすれば = が処理される前に $fp が評価されるはず。
演算子の優先順位の項目を参照のこと。

質問するときはどこでどんなエラーが出てるのかちゃんと書けって
いつも言ってるだろこのバカチンが !!
0335nobodyさん03/07/04 23:13ID:???
訂正。
評価されるのは $fp に入る前の fopen(); の結果ね。
0336nobodyさん03/07/04 23:29ID:???
>>325
MySQLの場合、単行updateなら不要。
マニュアルのlockの項を参照。
0337nobodyさん03/07/04 23:31ID:???
fopenの前に@をつけるとどういう意味になるの?
0338nobodyさん03/07/04 23:49ID:???
@foo();
This will supress the injection of error messages into the data stream output to the web client.
0339nobodyさん03/07/05 00:34ID:???
エラーが出たならそれをコピペ汁↓
034033603/07/05 00:42ID:???
あ、勿論DB操作するスクリプトが並列に動いてるなら、
対象行がdelete掛けられた場合の処理(逃げ)は必要だよ
0341nobodyさん03/07/05 04:20ID:???
supressってなんだろう・・・
0342nobodyさん03/07/05 08:20ID:???
>正しくは $fp = @fopen($file,"w") or die("error");
>こうすれば = が処理される前に $fp が評価されるはず。

ダメじゃん・・・。
0343nobodyさん03/07/05 09:26ID:???
>>341
×supress
○suppress
0344nobodyさん03/07/05 10:06ID:???
>>332
$fp = @fopen($file,"w");
if ($fp) {
#処理
}else {
die ("error");
}
0345nobodyさん03/07/05 10:36ID:???
>>343
ありがとう。ようやくexciteで翻訳できた。
0346nobodyさん03/07/05 22:14ID:???
>>342 ->��-> >>335で。
034732303/07/06 13:15ID:???
>>326
フィールドのタイプはtext、文字数は設定なし、取り出してるクエリは
SELECT *
FROM `テーブル名`
です。
よろしくお願いいたします。
0348あぼーんNGNG
あぼーん
■ このスレッドは過去ログ倉庫に格納されています