トップページ⇒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 
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
あぼーん
0349nobodyさん03/07/06 18:42ID:???
>>348
一刻も早く消されることを願う。
0350あぼーんNGNG
あぼーん
0351nobodyさん03/07/06 19:48ID:???
>>347
どうやってテーブルに入れてるの?
「入ってない」んだったら取り出すよりも入れるほうが問題かも
035232303/07/06 20:28ID:kEFDIfkp
>>351
レスありがとうございます。
print "<input type=\"hidden\" name=\"ip\" value=$ip>\n";
print "<input type=\"hidden\" name=\"ua\" value=$ua>\n";
のような形でフォームから普通に配列に入れてテーブルに追加しているつもりだったのですが
DWMXを使ってしまったのでよく解らなくなりました。下記のあたりはどうすればよいのでしょうか。
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
0353あぼーんNGNG
あぼーん
0354nobodyさん03/07/06 23:11ID:???
>>352

横レス 失礼

もしかして パワープラント 使ってました?
いや theXXX か゜懐かしかったもので。
0355名無し03/07/07 16:56ID:+XnYDKVb
>>334 失礼いたしました(´∀`ι
ようやく解決しました。「or」に直し、if文をなくすとOKでした。
ありがとうございました。
PS.>>337 @fopen=>の@は、エラー抑止させるという機能です。
0356あぼーんNGNG
あぼーん
0357nobodyさん03/07/07 18:33ID:???
flock関数が環境依存なので、ディレクトリ操作でロックしようかと思うのですが、
調べたところあんまり評判がよくないような気がします。

他にクールなファイルロックの手段ってありますか?
0358nobodyさん03/07/07 18:37ID:???
ちなみにこのスレを参考にしました。
【Perl】ファイルロック(排他処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/
0359nobodyさん03/07/07 21:58ID:???
Apache/PHP さわり初めて3日。
Windows2000Professional sp3
Apache2.0.46
PHP 4.3.2
Firebird 1.5RC3
でPHPソース EUC-JP
データベース EUCJ_0208
magic_quotes_gpc off
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
;mbstring.script_encoding = SJIS
でquery結果を Print するとデータベースから取り出した
漢字の 井(0x88,0xE4) が 遺・(0x88,0xE2,0xE1) に
なるんだが、どこがまずいのかさっぱりわからん…
へるぷみー
0360nobodyさん03/07/08 02:21ID:???
全部;閉じて試してみ。
036135903/07/08 09:14ID:???
う〜ん、設定全部閉じてもかわらんです。
どうもデータベースの取り出し結果が必ず SJIS になってるような…。
ソース  DB   
EUCJ   EUCJ  文字化け
EUCJ   SJIS   文字化け
SJIS   SJIS   ○
SJIS    EUCJ   ○
出力設定の変更では何も変化なし。
0362nobodyさん03/07/08 12:11ID:jypS6q60
copy関数でファイルのアップロードをしているのですが、
msi形式のファイルをアップロードするとコピーされません。
他の形式のファイルでは問題なくアップロードできるのですが、
何か問題があるのでしょうか?
0363nobodyさん03/07/08 12:58ID:???
拡張子や 実際のファイルの中身で copyの挙動は変わらないと思うから、
他の原因を探ってみては?

・ファイルサイズ
・自分でmsiを拒否ってた。
・ブラウザで存在確認しただけだった。
・そもそもmsiの中の人など居なかった等々
0364nobodyさん03/07/08 13:18ID:jypS6q60
>>363
いや、拡張子でなくバイナリ的にmsiが何か拒否られてるみたいなんです。
ためしにpdfファイルを拡張子msiに変えて試したら正常にコピーされました。
逆にmsiファイルをpdfに変えてもダメ。他のmsiファイルで試してもダメ。

LAN内の端末なので実際にファイルがコピーされてないことも確認してます。
0365nobodyさん03/07/08 13:30ID:syho/6wx
窓を開けばのランキングのリンクってどうやって張るの?
036632303/07/08 14:24ID:???
なんとなく解決しました。
フォームから入力するのをやめたらできました。
0367nobodyさん03/07/08 19:13ID:???
今、携帯対応版の掲示板をと考えています。
そこで、PHP4.3.2にGD2.0.15のGIFサポート版を
リンクしてコンパイルしようとするのですが、PHPのmakeで
エラーがでてしまいます。どなたか、実践された方居られませんか?

GDの ./configure
./configure \
--with-png=/usr/local --with-freetype=/usr/local --with-jpeg=/usr/local --with-xpm=/usr/X11R6

PHPの ./configure
./configure \
--enable-zend-multibyte --enable-mbstring --enable-zend-multibyte --enable-calendar --with-imap=/usr/local/lib \
--with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs --enable-exif \
--with-gd=/usr/local --with-zlib-dir=/usr/local/include \
--with-png-dir=/usr/local --with-jpeg-dir=/usr/local --with-freetype-dir=/usr/local --with-xpm-dir=/usr/X11R6 --with-zlib-dir=/usr/local

そのままでは make中
ext/gd/gd.c に undefined reference なエラーが発生するので
展開したGDの gd.* gd_gd.* gd_io.*を ext/gd/ にコピーしてmakeすると
main/internal_functions_cli.c に undefined reference to `gd_module_entry'
なエラーがでてしまいます。どうやら ext/gd/php_gd.h の
extern zend_module_entry gd_module_entry; あたりかなとは思うのですが、
ここで力尽きてしまいました。どなたかご存知の方居られましたら
ご教授ください。なおOSはFreeBSD4.3です。

長文失礼しました。

GIFサポートはこれで、どうやらLZW系のライセンスはクリアしているらしいのですが
ttp://www.rime.com.au/gd/
0368nobodyさん03/07/10 09:27ID:???
GIFライセンスって切れたんじゃなかったの?
0369nobodyさん03/07/10 11:44ID:???
>>368
切れたには切れた。米UNISYSだけね。
日UNISYSでは、来年の6月19日まで。
0370nobodyさん03/07/11 01:11ID:jNV68Tt5
d
■ このスレッドは過去ログ倉庫に格納されています