【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
0558nobodyさん
03/07/31 02:30ID:???0559nobodyさん
03/07/31 04:20ID:???0560nobodyさん
03/07/31 05:08ID:???0562nobodyさん
03/07/31 14:45ID:UI9TuZ6S特定の文字列から特定の文字列までを置換したいんだけど、どうすればいいでしょうか?
hogehoge<REPLACE>2ちゃんねら</REPLACE>hogehoge
↓
hogehogeDQNhogehoge
こんな感じで。
0563あぼーん
NGNG0564nobodyさん
03/07/31 15:09ID:UI9TuZ6S追加質問していいですか?
置換した回数をカウントしたいのですが、str_replaceやereg_replaceでは
全置換されてしまうじゃないですか。
ひとつずつ置換をする関数ってないのでしょうか?
よろしくおねがいします。
0565nobodyさん
03/07/31 17:33ID:???preg_match
preg_match_all
あたりを見てみては?
0566565
03/07/31 17:42ID:???正規表現が良くわからず調べてもう〜んと唸るようであれば、泥臭くやるしかないかな。
strpos 等で開始タグの位置を見つけて前後の文字列で置換する文字列をサンドイッチ
して元の変数に格納という一連の処理を開始タグが見つかる限り繰り返せば結果は得
られると思うけど。
ただメモリーへのアクセスが頻繁になるからWebなんかで不特定多数のアクセスがある
ような処理につかうのはおすすめできない・・・。
0567梨
03/07/31 17:52ID:Vgd/NQeb数KB(?)に一度、 \nXXX\n のようなゴミ文字列が挿入されてしまいます。
(\nは改行で、XXXの部分は [0-9a-f]{2,3} のような文字列)
環境はWindows 2000で、
PHP 4.3.2 (cli) (built: May 28 2003 15:10:38)です。
再現は(他人様の物で恐縮ですが)以下のソースでも可能です。
tp://www.spencernetwork.org/memo/tips-3.php
ただし、HTTP/1.0接続をおこなった場合にはゴミは発生せず正常動作します。
phpのバグを疑った所、fsockopenがメモリを破壊する問題は、
4.3.0で発覚して4.3.2では解消されているとの事でした。
わかる方いましたら教えてください。
わからなかったらとりあえず再現を試してくれる方募集っす。
0568nobodyさん
03/07/31 18:12ID:???とりあえずリクエストするサンプルサイトのURLをキボンヌ
0569nobodyさん
03/07/31 18:23ID:???FreeBSD4.4
Apache たぶん 1.2
PHP 4.2.0
で2chの1000までいったスレをそのスクリプトで表示してみたがゴミは無いようだった
考察はちょっとまってな。
0570nobodyさん
03/07/31 18:26ID:???これを HTTP/1.1 に変えてやってみればいいのか・・・
0571あぼーん
NGNG0572あぼーん
NGNG0573nobodyさん
03/07/31 18:32ID:???とりあえず
>570 の変更をした上で >569 のように2chのスレを取得してみたらたしかにゴミが検出されたよ。
まぁ正確にはゴミじゃあないんだろうけどね。
ちょっと調べてみるよ。
0574梨
03/07/31 18:39ID:???スンマソ。お手数かけます。
yahooが大丈夫だけど、php使ってるサイトはだめだった。関係ないか?
ちょっと、アクセス先については根拠のある事が言えない。
>>569の環境で出るという事であれば、バグでは無いっぽいのかな。
あとで他の言語でも試してみます。
0575nobodyさん
03/07/31 18:41ID:???chunkの線は無いと思うが、がんがってphp4.3.2のバグを探してくれ。
0576573
03/07/31 18:44ID:???漏れ的には chunk っぽい気がしてるんだけどね(爆
HTTP/1.1 なんて生で触ったこと無いからプロトコルから調べてるよ
0577573
03/07/31 18:52ID:???\r\n1000\r\n
という文字列が挿入されてるってことかな。
fgets の読み取りバイト数かと思って 512 と 1000 で試したけど変化なし。
マニュアルの fsockopen では fread を使ってたので試しにこれに変えてみても変化なし。
ちなみにレスポンスヘッダは
HTTP/1.1 200 OK
Date: Thu, 31 Jul 2003 09:41:49 GMT
Server: Apache/1.3.26 (Unix) AuthMySQL/2.20 PHP/4.1.2 mod_gzip/1.3.19.1a mod_ssl/2.8.9 OpenSSL/0.9.6g
Last-Modified: Wed, 30 Jul 2003 12:53:28 GMT
Transfer-Encoding: chunked
Content-Type: text/html
X-Pad: avoid browser bug
こんな感じで返って来てる。
0578梨
03/07/31 19:01ID:???ともあれ、ありが�d>>573, >>575
RFC2068にも書いてある(RFC2616を読んでね)けど、
CRLF受信バイト数の16進CRLF
が来てるって事よね。
ちょいとクライアント側の正しい実装がどんなのになるのか調べ中。
0579nobodyさん
03/07/31 22:01ID:CgHqCW+i"ソ\"になってしまいます。Mysqlにも"ソ\"そのまま入ります。
php.iniのmagic_quote行をoffにしてやると直ったんですが
そのままMysqlに登録すると化けてしまっています。
stripslashes()をつけてやるとこれも直るんですが
フィールドごとにいちいちつけるのは面倒くさいので
他に何かいい方法はないでしょうか?
0580あぼーん
NGNG0581あぼーん
NGNG0583梨
03/07/31 22:23ID:???「つーかeucにしろよ」と言いなおす。
0584Re: 配列のスライスに代入
03/08/01 02:01ID:S9mJFNQO出来るかどうか知りたかっただけでした。
一応、マニュアルとMailing-listのアーカイブ検索したけど、それらしい記述がなかったので。
ここが最後の頼みだったんだけど、やっぱ出来ないのかぁ。残念。
0585あぼーん
NGNG0586あぼーん
NGNG0587nobodyさん
03/08/01 09:04ID:???遅レスすまそ。
array_splice() でどう?
ttp://www.php.net/manual/ja/function.array-splice.php
0588nobodyさん
03/08/01 18:21ID:???現象的には確か「ソ」の2バイト目が「¥」のコードと
同じなんでエスケープ処理されるってことだな。
だから stripslashes すれば消えるのはあたりまえで、
もし鯖の設定を変えられないのであればいちいちかか
なきゃならんのはしょうがない。
まぁめんどくさかったら $_REQUEST をループ回して
格納し直したらどうよ。いろんなソースに書かないと
いけないとしてもコピペで済む(あるいはクラスを書くかだな)。
0589山崎 渉
03/08/02 02:21ID:???( ^^ )< ぬるぽ(^^)
0590ぼるじょあ ◆ySd1dMH5Gk
03/08/02 04:50ID:???ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0592nobodyさん
03/08/03 02:11ID:???【PHP】初心者コーナー 3 Released【スローモード】
アホな質問であっても詳しく質問しろよ。 ネタはおもしろく書けよ。
0594nobodyさん
03/08/03 02:20ID:XIyh3dEfといわれたんですがどういう意味でしょう?
バージョンは4.3.3RC2です。
文法エラーです。
…で予期しないT_CONCAT_EQUALが
0596nobodyさん
03/08/03 21:48ID:fj+ph+5sちょっと食い違いがあるんで質問させてください。
phpで掲示板作った場合、書き込んだ文字列に¥が勝手に
入ってしまう現象って、レンタル鯖での解決方法はstripslashes()関数を
つけることのほかに.htaccessで
php_flag register_globals on
php_flag magic_quotes_gpc off
と書いてアップすれば防げるって
ttp://www.komonet.ne.jp/report.htm
とか
ttp://www.e-provider.jp/server/php.html
に書いてあるんだけど、public_htmlフォルダ内に.htaccess置いても
防げません。.htaccessはメモ帳で「.htaccess.txt」として作成して、
アスキーモードで鯖にアプ後「.htaccess」にリネームしました。
テスト用のbbstest.phpは同じディレクトリにあります。
書くのはあの2行だけでいいんでしょうか?とりあえず2行だけに
しときましたが。
ちなみに鯖はaaa!cafeで、鯖HPのFAQには.htaccessは使えますって
書いてありました。
初心者な質問ですみませんが識者の方、どなたかお答え願えませんでしょーか。
0598nobodyさん
03/08/03 21:57ID:fj+ph+5s中途半端な質問ですんまそん。
調べてもどこもかしこも「php_flag〜の行を“含む”.htaccessファイルを」
と言ってるんで他にも書くことありそうだとは思って調べてるんですが…
.htaccessの正確な書き方が書かれたサイトが全然みつからん…
ミケネコのなんとかは分かりづらすぎ…
0599nobodyさん
03/08/03 21:59ID:fj+ph+5sアア、俺書き込み多すぎ。痛い。
そうですか、なんかあそこFAQの答え方がなげやりですもんね。
自作bbs置く香具師はめんどくてもコード書けってことか。ちくしょう。
0600nobodyさん
03/08/03 23:44ID:???書き方自体はそれでok
あとはユーザディレクトリの.htaccessが有効によまれるのか、
設定の上書きを許可しているのかとか
その辺
0601nobodyさん
03/08/04 00:00ID:???遅いレス。mysqlの「ソ」は私も悩んだ。
文末が「スマソ」とか「日本代表」だとエラーが出るんですよね。
phpinfoでmysqlの"Client API version"を4.*にすると症状は治まります。
どうも3.*のバグ(?)のようです。
mysql4.0+php4.3.2だとconfigureで--with-mysql=/usr/local/mysqlとかするといいみたいです。
0602nobodyさん
03/08/04 01:07ID:QF7utWcHサンクスコ
結局stripslashes関数で回避しました…
0603579
03/08/04 10:05ID:s0qIBXCyありがとうございます。
バグだったんですか^^;
どおりでおかしいと思いました。
では一度4に変えてみます^^
0604nobodyさん
03/08/04 18:00ID:8zL9M6pT判断するにはどうした良いですか?
適当なイメージ関数が定義されているか調べれ
0606nobodyさん
03/08/05 01:16ID:???http://www.php.net/manual/ja/function.extension-loaded.php
0607nobodyさん
03/08/05 01:36ID:???んだけど、もしかして無くなったのかな、どうよ。
0608nobodyさん
03/08/05 08:57ID:V6DdtSg7$html="
<pre>
<br>
<form method=post action=$file>
<table width=480 border=0 align=center>
TEXT1: $r[0]
</table>
</form>
</pre>
";
と記述するとTEXT1の文が長すぎると途中できれてしまうのです。自動で改行する良い方法
はありませんでしょうか?よろしくおねがいします。
0610nobodyさん
03/08/05 11:45ID:BUuQIqrMfunction convert_code (&$val,&$key,$code,$oldcode){
$val = mb_convert_encoding($val,$code,$oldcode);
}
array_walk ($array, 'convert_code','EUC-JP','SJIS');
array_walk ( array arr, string func [, mixed userdata])
という仕様ですが、この場合、userdataは配列や複数の値を
渡せないのでしょうか?
0611608
03/08/05 11:53ID:V6DdtSg7<table>使わないと全体的に左に寄ってしまいますよね。
バランスが悪いので何か対処法はありませんでしょうか?
0613nobodyさん
03/08/05 12:38ID:???よく見りゃつっこみどころ満載の「HTML」だ。
0614あぼーん
NGNG0615あぼーん
NGNG0616nobodyさん
03/08/05 13:16ID:???function convert_code (&$val,&$key,$opts){
$val = mb_convert_encoding($val,$opts[0], $opts[1]);
}
array_walk ($array, 'convert_code', array('EUC-JP', 'SJIS'));
可変引数は渡せないから第3引数にmixed型を渡すように
なっている。
だから配列もしくはオブジェクトなら渡せる。
0617nobodyさん
03/08/05 16:11ID:???CSSを使用すれば余白の制御など細かく出来る。
CSSが大変そうなら <blockquote> タグあたりでどうかね?
0618nobodyさん
03/08/05 17:37ID:woPpy0rJ前略
mysql_query(insert into T1(f1,f2,...) values('$1','$2'...));
mysql_query(insert into T2(fA,fB,...) values('$A','$B'...));
mysql_query(insert into T3(fa,fb,...) values('$a','$b'...));
といったように、一つのphpファイルに連続して複数のテーブルに入力
しようとしても、最初のクエリのみしか受け入れてもらえません。
フォームからの変数は問題なく受け取っており、エラーになるわけでも
ありません。
どなたか、原因と対処を御教示下さい。 m(_ _)m
0619618
03/08/05 17:42ID:woPpy0rJ0621618
03/08/05 20:07ID:HahDoJ1D$result1 = mysql_query("insert into T1(f1,f2,...) values('$1','$2'...)");
$result2 = mysql_query("insert into T2(fA,fB,...) values('$A','$B'...)");
$result3 = mysql_query("insert into T3(fa,fb,...) values('$a','$b'...)");
こんな感じで記述してあります。618は筆足らずでした。。
0622あぼーん
NGNG0623あぼーん
NGNG0624あぼーん
NGNG0625nobodyさん
03/08/05 21:38ID:???mysql_query()を呼んだ後は、返り値がTRUE(非ゼロ)またはFALSEのどちらかを確認して、
もし返り値がFALSEならmysql_errno()とmysql_error()を確認しよう。
さもなくば「エラーが出てない」とは言えない。
0626618
03/08/05 22:25ID:HahDoJ1D感謝!!
早速確認してみます。 ・・・でも、localhostで動作確認したときは
問題なく全入力出来たのに、、、
どういう可能性が考えられるのでしょう?
0627nobodyさん
03/08/05 23:04ID:???ありがとうございました。マニュアル眺めてるだけでは、なかなかわからんもんです。
0628nobodyさん
03/08/06 09:32ID:TaNZWYB4仕様?
0630あぼーん
NGNG0631あぼーん
NGNG0632nobodyさん
03/08/06 12:52ID:9CpMMik0popenでquota呼んだら
>Disk quotas for user xxxx (uid xxxx): none
しか来ないんだけど。
telnetだとusageとかgraceとか出るのにー
何か手ないすか?
0633あぼーん
NGNG0634nobodyさん
03/08/06 13:31ID:???伏字にしているのはエスパー募集だからですか?
0635nobodyさん
03/08/06 15:15ID:???とりあえずシェルから quota 呼ぶのと PHP(HTTPデーモン経由)から quota 呼ぶのとで
ユーザーが違ってると言ってみる
0637nobodyさん
03/08/06 18:46ID:wRB10Bh6日本語と英数が混じってると最後が・になったりして
おかしくなる場合があります。どうすれば上手くできるんでしょうか。
使ってるサーバーがmb関数使えないサーバーなんですけどできますかね。
0638nobodyさん
03/08/06 20:10ID:+64gfyUC0639nobodyさん
03/08/06 20:21ID:???漢字コード変換
http://www.spencernetwork.org/
0640nobodyさん
03/08/06 20:52ID:???文字コードが一定なら正規表現で1字ずつ数えれば良かろう。
([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})
とかね。似たような関数をperlから移植する手もある↓
ttp://www2u.biglobe.ne.jp/~MAS/perl/waza/strcut.html
0641nobodyさん
03/08/07 15:46ID:oxPy+Rmw「ID:ジャンル名:所属ID」
という再帰テーブルを作りました。
この場合、直下にあるデータ一覧は所属IDをIDで検索すればすぐ出ますが、
トップからのパスはジャンル>所属しているジャンルID>さらに上のID…>
トップと検索して配列にセット、それを反転してトップ>ジャンル>その下の
ジャンルと整形しています。
この場合何度もSELECT文を出さなければなりませんが、もう少し効率的に
やる方法はないですか?
0643404.HDML ◆StMXML.EXE
03/08/08 01:59ID:???取得する方法は有りますか?
それとも、リモートファイルの内容を一時ファイルとして保存したものをfilesize
関数で読み出すべきでしょうか?
0644nobodyさん
03/08/08 02:17ID:???相手がHTTPで、且つそのヘッダでContent-Lengthが出力されてれば、
そこから取得することは可能。他のプロトコルは、やはり一度ナメるしかないんじゃないかな。
0645404.HDML ◆StMXML.EXE
03/08/08 02:30ID:???リモートからContent-Lengthが返って来ない場合は取得不可なのですね。
有難うございます。
後、うっかり「HTTPでオープン」って書くの忘れてました。すみません。
0646404.HDML ◆StMXML.EXE
03/08/08 03:15ID:???fread関数からデータを読みこみ、それをstrlen関数を使ってサイズを測る、、
という方法を試したら、何故か8192バイト以上が読みこめなかったので、
fgets関数をEOFを検出するまで回し、その過程で取得したデータを一本に
繋げてstrlen関数で読むという方法で何とかなりました。
0647
03/08/08 03:27ID:0z0bK8pF0648nobodyさん
03/08/08 03:33ID:???サーバーが停止している場合はローカル上のファイルを
includeするようにしたいのですが、
どうすればいいのでしょうか?
fopenか何かでリモートに繋ぎ、ダメだったらローカルを読む、と。
0651nobodyさん
03/08/08 09:56ID:LraV0Dkuありがとうございました。
別の質問です。
MYSQLでAutoIncrementのフィールドがあるとき、INSERTしたあと
現在のその数を取得するには再びSELECTするしかないのでしょうか?
登録IDを作りたいと思っていて、PHP側でキーを生成してPrimary設定の
フィールドにINSERTするよりは綺麗な連番になるかと思ったんですが、
保存後にIDが何番になったか再取得しないと表示できないのです、、、
0654nobodyさん
03/08/08 13:18ID:LraV0Dkuではどうやって再取得したらよいでしょうか。
今回の場合はそこまでクリティカルではないので問題ではないですが。
mysql_affected_rowsを利用するか、mysql_insert_idでしょうか。
前者の場合は再取得前に次の値がセットされればダメですし、
後者はいまいち使い方が分からない。。。
0655nobodyさん
03/08/08 13:28ID:LraV0Dku$info = mysql_fetch_array(mysql_query("show table status from DB_USER like 'TABLE_NAME'",$MyLink));
$inserted_id=$info[Auto_increment] - 1;
という方法もありますが、これでもチャットレベルではダメかも。
0656nobodyさん
03/08/08 14:17ID:???http://www.php.net/manual/ja/function.mysql-insert-id.php
マニュアルのとおり、単純に mysql_query した次の行で $foo = mysql_insert_id;
と書けば $foo にIDが取れる寸法のはず。
link識別子を使い分ける場合は明示的に指定する必要がある
■ このスレッドは過去ログ倉庫に格納されています