【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
0474あぼーん
NGNG0475nobodyさん
03/07/23 21:37ID:???<p><input type="text" name="text2" size="40" value="<?php echo $_GET['text1'] ?>"></p>
ここが11行目です。
0477nobodyさん
03/07/23 22:13ID:???0479nobodyさん
03/07/24 08:32ID:???namazuで検索したいのでEUC版が欲しいのですが・・・
0480nobodyさん
03/07/24 09:41ID:???0481nobodyさん
03/07/24 10:03ID:???0482nobodyさん
03/07/24 10:37ID:???とりあずNotice出したくないんなら変数を宣言しろ。
if(!isset($_GET[text1])) {$_GET[text1]="";}
if(!isset($_GET[text2])) {$_GET[text2]="";}
0483482
03/07/24 11:06ID:???if(!isset($_GET['text1'])) {$_GET['text1']="";}
if(!isset($_GET['text2'])) {$_GET['text2']="";}
こうだね。
0484nobodyさん
03/07/24 11:14ID:???if(!isset($_GET['text2'])) $_GET['text2'] = "";
むしろこうじゃ無いのかと。
@$_GET['text1'];
@$_GET['text2'];
でもいいけどね。
0486nobodyさん
03/07/25 03:55ID:???includeは常時、ファイルをincludeして監視状態なのでしょうか?
ということは、大規模になると、遅くなる原因になるのかなと思いまして。
たとえば、config.phpが、
//config.php
$hoge = "2ch";
$moge = "3ch";
・
・
・
-------------------------
この時、
include "config.php";
echo $hoge;
それとも、
if($hituyou){include"config.php";}
echo $hoge;
こんな感じ。
大規模の時に下の方が負担は軽減される。
と妄想してるんですが、本当はどうなんでしょうか?
0487nobodyさん
03/07/25 04:05ID:???includeはその時点で全て読み込まれるんじゃ・・・
そのincludeファイルが必要になった時点で読み込めばいいと思うけど。
そんなに遅くなる原因にはならないと思うけど。
0488nobodyさん
03/07/25 09:51ID:wJ5ItSlnphpでgzip圧縮通信がしたくて、php.iniファイルの設定で、
output_handler = ob_gzhandler
としたのですが、これで正しく圧縮通信ができるのでしょうか?
もしできているのなら、それをどうやって確認すればいいでしょうか?
環境はRedHat9.0 Apache2 PHP 4.3です。
0489nobodyさん
03/07/25 10:53ID:TM9efvfmphpのバージョンを4.2.3から4.3.2にアップグレードさせようと考えています。マニュアル、FAQ等でその方法を調べてみたのですが、探し方が悪いのでしょうかイマイチ明快な答えが見つかりません。
一応以下に示す方法を実行しよようと考えているのですが何か安易な気がしてなりません。お気付きの点がありましたらご指摘ください。
私的には、3. でmake clean して前のヴァージョンの makeファイルを削除するのがミソかなと思っているのですが…。
これでは前のヴァージョンをアンインストールすることにならないような気もします。そもそも前のヴァージョンを削除する必要があるのかどうかすら分かりません。
勉強不足で申し訳ありませんが、皆様宜しくお願いします。(昨夜一度質問してみたのですが、どこの板に書いたか見失ってしまいました…)
環境:RedHatLinux7.1+apache1.3.27+php4.2.3
1.まずhttpdを停止する。
$ su
# /etc/init.rd/httpd stop
2.php4.2.3のソースファイルが展開されているディレクトリに移動する。
# cd /usr/local/src/php-4.2.3
3. make clean でmakeファイルを削除する。
# make clean
4.php4.3.2のソースファイルが展開されているディレクトリに移動する。
# cd /usr/local/src/php-4.3.2
5. ./configure を実行する。
# './configure' '--enable-mbstring' '--enable-mbregex' '--enable-zend-multibyte' '--with-pgsql' '--with-apxs=/usr/sbin/apxs' '--without-gd' '--with-zlib' '--with-openssl' '--enable-versioning'
6.make 、make install を実行する。
# make
# make install
7.httpd を起動する。
# /etc/ini.rd/httpd start
0490あぼーん
NGNG0492あぼーん
NGNG0493nobodyさん
03/07/25 11:31ID:???make clean が何をやっているのか考えてみましょう
0494nobodyさん
03/07/25 20:46ID:???index.phpからinclude_onceで読むのはうまくいくのですが、
count.phpからこれと同じ場所にあるデータファイルのcount.datを開こうとして
$fp =@fopen( "count.dat", "r") ;
とすると、
Warning: fopen("count.dat", "r") - No such file or directory in *********/count/count.php on line 42
となってしまいます。includeされたファイルの中で別のファイルを開く場合、パスの表記はどのようにすれば良いんでしょうか?
読み込み元のファイルのディレクトリを基準にするのか、読み込まれたファイルのディレクトリを基準にするのかが分かりません。
と言うより後者ならこれでうまくいくと思うのですが、これだと一つのカウンタで複数ページをカウントさせるのに
面倒な気がするので、もっと良い方法が無いかと探しているのですが…
0497nobodyさん
03/07/25 23:55ID:OQ729f+cネット上によくある、フリーCGIの配布サイトでは時々
「セキュリティホールが見つかったのでバージョンアップしてください」
というようなことが書かれてたりしてますが、
PHPでもセキュリティホールはあるんですか?
あるとしたら、どんなのがまずいんでしょうか
とりあえず、どこかのPHPスレではPHPが「index.php」を吐くのはマズイ、
と書いてありました
フォーム入力を受け付ける、掲示板みたいなものを作る場合、タグを
除去すれば大丈夫ですか?
0499494
03/07/26 00:00ID:???分かりました。その方法でやってみます。
ただ思い付きでいろいろ足して分かんなくなってきたので、
一から書直そうと思いますが。ありがとうございました。
0503nobodyさん
03/07/26 00:08ID:???>>502
PHP自体のセキュリティーホールとヘタレなコーディングによる
セキュリティーホールを混同してない?
「あんめろ」は「あんたには向いてない、やめろ」の意。
(民明書房刊「よくわかるセキュリティホール」より)
0504nobodyさん
03/07/26 00:16ID:???回答ありがとうです
自分が知りたかったのは、へたれなコーディングによる…の方でした
どんなコーディングがマズイのかな、と思って
「あんめろ」身に沁みました
0505nobodyさん
03/07/26 01:21ID:???>とりあえず、どこかのPHPスレではPHPが「index.php」を吐くのはマズイ、
なんでマズイの? 俺、吐き出してる。吐き出してる。
0506あぼーん
NGNG0507あぼーん
NGNG0508nobodyさん
03/07/26 03:13ID:83bOjRPY相当するものはない?
てっきりfileutimeみたいな関数があるだろうと思ってマニュアルを
見てみたがどこを探してもない。
どうやって変えるのだ??
0509nobodyさん
03/07/26 03:37ID:VZ1x6qD8んなこたーない。
"ファイルシステム関数"という章をよく見る。
0510nobodyさん
03/07/26 21:05ID:92eVqrLvhttp://www.hogehoge.com/~hoge/test.php/20030724/2310
↑こんな感じにPHPへデータを渡す方法知りませんか?
test.phpの内容を
<?php
phpinfo(32);
?>
にして結果見てみればわかる。
0512あぼーん
NGNG0513nobodyさん
03/07/27 04:37ID:C5x2VQP+更新変更はtouch()でやるのは分かったんだが、
最終アクセス変更をするのがやっぱり見当たらない。
0514nobodyさん
03/07/27 09:42ID:???Windowsなら単にreadしたりファイルサイズ取得関数とか使えば良し。
ファイルのプロパティ見てみ?いつも現在時刻だ。
0515nobodyさん
03/07/27 22:48ID:0kmBdvtlファイルの中身を修正する前に、ファイルの時間情報を取得しておいて
処理が終わった後にファイルの時間情報は修正前のままにしておきたい
って場合にどうすればいいのかと。
つまり最終アクセス時間と最終更新時間を過去の時間に設定したい訳ですな。
Perlだとutimeで両方、任意の時間を入れてファイルの時間情報を修正できるけど、
PHPだとtouchで最終更新しか変更できないみたい(見つけられなかった)。
ちなみにPerlからPHPへの移植をやってる過程で出てきて???になった。
やってる移植では更新時間を見て処理に使ってるから、最終アクセスは
なくてもいいけど、なんらかの理由で最終アクセス時間の変更が必要に
なった場合はどうするんだろ?
0516nobodyさん
03/07/27 23:33ID:???(UNIXタイムスタンプ)を指定できます。
しかしなんで公式のマニュアルには載ってないんだろ?
0517nobodyさん
03/07/27 23:41ID:???0518nobodyさん
03/07/27 23:53ID:???翻訳の遅れがあるみたいなのでこれからは英語版を見るようにします。
0519515
03/07/28 00:11ID:???自動で日本語版に切り替わるんだな。
touch (PHP 3, PHP 4 )
touch -- Sets access and modification time of file
bool touch ( string filename [, int time [, int atime]])
http://www.zend.com/manual/function.touch.php
日本語訳マニュアルをローカルに置いてそれを参照してたから
見つけられなかったよ。
英語版も随時参照すべしと自分に言い聞かせた次第。
0520nobodyさん
03/07/28 00:13ID:???0522nobodyさん
03/07/28 00:26ID:???最近はけん日本語で検索できて便利よ。
ttp://www.phpoo.net
0524nobodyさん
03/07/28 15:06ID:???ソ\アラというようにdataファイルに記録されています。
perlでつくった掲示板では普通にソアラと書き込めたんですが。
ローカルでshift-jisで書いております、eucでも試してみたんですがeucで保存すると
表示されないようです。php4.3.2を入れております。
ご助言願えませんか、ソースは下記のような感じでやってみました。
$carname = $_POST['carname'];
$newdata = implode(",", array($bango,$carname,$rap));
$kakikomi = fopen($datfile, "w");
rewind($kakikomi);
fputs($kakikomi, "$newdata\n");
0525nobodyさん
03/07/28 15:22ID:???国際化非対応だと文字が化けたりするもよん。
PHPはEUCで書く方が安心かと。
S-JISで受けたデータはjcode.phpでEUCにしてから内部で扱う。
んで、書出すときにまたEUC→S-JISに変換、と。
と言う事をどこぞで見たのだが。
0527nobodyさん
03/07/28 17:36ID:???HTMLに値を埋め込む時に
<?= hoge ?>
という書き方の出来るサーバーと出来ないサーバーがあります。
www.php.net のマニュアルを見ると asp_tags という設定ディ
レクティブで設定可能なようなのですが、双方のサーバーで
phpinfo() で設定を確認すると両方offになっているのです。
出来るサーバーの方は Apache 1.x 系にPHP4.2.0 で、
出来ない方は Apache 2.x 系にPHP4.2.2です。
php.ini は特に置いてません。
上記の記法の出来る出来ないは asp_tags 以外に何か設定が
あるのでしょうか?
0528nobodyさん
03/07/28 18:09ID:???0529525
03/07/28 18:30ID:???俺も初心者なんで、あまり詳しい事は書けませんけど、色々とチュートリアルを公開しているサイトを見る限りでは
初めからEUCで扱う(無論出力されるHTMLなんかも)か、せめて内部ではEUCとして扱う方がトラブルが少ない様です。
元々UNIX系はEUCだったと思うし、jcode.phpは見た感じそれほど使い方は難しくなさそうなんで、間に噛ませても良いんではないかと。
このスレの前半の方にもそんな話があったので、探してみると役に立つやも。
>>527
short_open_tag
0532nobodyさん
03/07/28 19:27ID:hpj2UE6Dライブラリにする方法を知っていたら、誰か教えてくだすぁい。
0533あぼーん
NGNG0534nobodyさん
03/07/28 23:51ID:???自分でつくってるんですが行き詰まりを感じてしまって
0536nobodyさん
03/07/29 08:38ID:???THX
short_open_tag でビンゴでした。
マニュアルでも asp_tags のすぐ上に書いてあったし(ウトゥ
0537nobodyさん
03/07/29 23:27ID:???ここの画像投稿BBS、どうやって画像に文字を埋め込んでいるんだろう?
設置者に聞けよ。
GDかなんかじゃないんか?
0539nobodyさん
03/07/30 00:48ID:???$str="ほ げ(ほ げ)-ほ げ";
$char1=" ";
$char2="(";
$char3=")";
$char4="-";
$char5="";
$str1=str_replace($char1,$char5,$str);
$str2=str_replace($char2,$char5,$str1);
$str3=str_replace($char3,$char5,$str2);
$str4=str_replace($char4,$char5,$str3);
echo "$str4";
preg_replace
0541nobodyさん
03/07/30 02:30ID:2CHAOdfRマニュアルより
>PHP 4.0.5 以降では、str_replace() への全てのパラメータは
>配列とすることが可能です。
0542あぼーん
NGNG0543nobodyさん
03/07/30 03:43ID:+xTBPNpJ昔、phpのメーリングリストで見たような気がしたんだけど、
googleで調べたら出来ないって書かれたサイトが出てた。
0544nobodyさん
03/07/30 11:15ID:???ここを説明しないと。(w
0545nobodyさん
03/07/30 12:12ID:???こういうことあじぇ?
0546nobodyさん
03/07/30 13:50ID:WV3lkWy5動かしてます。とりあえず
<?php phpinfo() ?>
は正常に表示されるので動作自体はしてると思うんですが
<? echo "てすと"; ?>
とかやると思いっきり文字化けしてしまいます。
winnt/php.ini へも日本語が使えるように設定はしたんですが
(default_charset = "Shift_JIS"とか)
なんか他に設定すべきところとかありますでしょうか?
0547nobodyさん
03/07/30 16:24ID:L2kAsoKqmbstringsでググレ
0548nobodyさん
03/07/30 17:09ID:???ここを説明しないと。(w
0549nobodyさん
03/07/30 19:01ID:QNOIDVkYレッツPHPのちゅーとりあるで紹介されている
一行掲示板をいろいろとこねくりまわしているのですが、
オート・リンクの機能を付けることに躓いています。
ご指導の程、よろしくお願いします。
0550あぼーん
NGNG0551あぼーん
NGNG0552nobodyさん
03/07/30 20:55ID:???正規表現で文字列を調べて、URI(URL)があれば
それを抜き出して、アンカータグと組み合わせて
置換する。
マニュアルで置換をする正規表現関数を調べて、
それが実際どのように使われているか、レッツPHPさんの
他の配布スクリプトを見て研究してみては?
0554nobodyさん
03/07/30 22:02ID:???ご指摘を受けて、
マニュアルを読みましたら、つぎのような部分がありました。
例 3URLをリンクで置換する
$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
"<a href=\"\\0\">\\0</a>", $text);
これでうまくいきました。
ありがとうございます。
0555sage
03/07/30 23:32ID:EqJM85qgできない。
あればあったで便利だし、perlからの移行が楽だが
phpは配列操作の関数が比較的豊富なので
なければないで何とかなる。
0556nobodyさん
03/07/31 02:11ID:DkZYq6f/どうやったらよいでしょうか。
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のスレを取得してみたらたしかにゴミが検出されたよ。
まぁ正確にはゴミじゃあないんだろうけどね。
ちょっと調べてみるよ。
■ このスレッドは過去ログ倉庫に格納されています