【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
0449nobodyさん
03/07/16 01:32ID:APFwOkckというよりタブ空文でも改行でもデータを拾うようにして4フィールど
毎に1つ目のフィールドが数字である事をチェックして真なら改行。
これでよいはず。前述でも同じ結果が得れたらなんでもいいだろうけど
0451404(・∀・∀・)HDML ◆StMXML.EXE
03/07/16 01:42ID:???俺の場合、PerlよりハイカラなイメージがPHPに有ったからというだけの理由。
ちなみに今でもド素人の部類に入ると思います。Perlの勉強すらすっとばして
いきなりPHPから始めちゃった訳ですから。
そもそも、自前でアクセス解析スクリプト程度のものを作れればいいかなー、
程度の目標だったんで上達する事も無く。
今借りてるレンタルサーバがSQLに対応してくれていないせいも有って、データ
ベース系を勉強する機会も興味も沸かないし。
0452nobodyさん
03/07/16 01:48ID:APFwOkckデータ4個周期を基本にチェックしてるわけだし。よほどいいかげんな
DB処理でないかぎりIDとデータが混同される事はないでしょ。
0453nobodyさん
03/07/16 02:07ID:???id name abc tel
1 あああ あああ(改行)
1(改行)
1 090-xxxx-xxxx(改行)
2 あああ あああ 090-xxxx-xxxx(改行)
ってのを
split /\t|\n/
ってやるとややこしくなんね?
違うやり方をいってるならスマソ。
0454415
03/07/16 02:55ID:???そうなんですかw
僕の方は幸い、なんでも出来そうな環境が整っています。
DBまでの道のりは長そうなので、まず何Pかカウンターを作ってみました。
で、次なんですけど、何をやろうか迷っています。皆さんの参考を教えてください。
まだ、面白いと思える段階ですw
0455nobodyさん
03/07/16 09:14ID:APFwOkckまず1行分と予測する生データを4つバッファリングして5つ目のデータ
を参照。5つ目がIDデータだと判断できたら1行分を修正済みを格納す
る配列へ代入。もし5つ目がIDデータでないなら4つ目とくっつける。
で、6つ目をチェック。以下同様。
根本的に異常なデータが混じっていない限りきっちり修正出きると思う。
処理はややこしいかもしれないが確実。無条件な状況判断ではどこか
でおかしな処理をしやすいから串だんごみたいにして1本ずつ丁寧に
修正してやるとよいかも。
2ch互換スクの故障データの修正で体験した
0456nobodyさん
03/07/16 16:45ID:IyV1t1TM自作のエラー用の関数で、何処で起きたか表示させたいのです
0457418
03/07/16 17:05ID:???力業っぽいですが、解決しましたのでお知らせします。
#<pre class="code">〜</pre>に置き換え後、
$msg = str_replace("\n", "<br />", $msg);
$array = split("pre", $msg);
for($i = 0; $i<count($array); $i++){
if(strstr($array[$i], "class=\"code\"")) $array[$i] = str_replace("<br />","~~", $array[$i]);
}
$msg = join("pre", $array);
表示処理で
$msg = str_replace("~~","\n", $msg);
ありがとうございました。
0458nobodyさん
03/07/16 21:11ID:???(C言語で言うところの int i; のように)
タイプミスで一文字違っただけで数時間も悩むのはもうイヤ!
0459nobodyさん
03/07/17 01:05ID:???つこてるバージョンによっても違うが、
error-reportのレベルをNOTICEも出力するようにすると出ない?
error_reporting(E_ALL)とか。
http://jp.php.net/manual/ja/function.error-reporting.php
あとは折れは"$文字列"の正規表現で、ファイルあたりの出現回数を
カウントしたりしてる。変数名に固有のプリフィクスつけて管理してるので。
0461nobodyさん
03/07/18 07:11ID:???もし存在するならどこにあるか教えてください。
0463nobodyさん
03/07/18 23:43ID:Uzp0kmuOMac OS �] 10.2.6ですが、
PHPのバージョンてどこをみれば分かるのですか。
0464あぼーん
NGNG0469nobodyさん
03/07/22 10:50ID:???header("Location: http://hogehoge.com");
をつかってみたのですが、これだとリファラが残ってしまいます。
ソケット関数使わずにリファラを消すにはどうしたらいいですか?
0470nobodyさん
03/07/22 20:45ID:???困って問題があるのか?
不特定多数を別のサイトに送り込んでカウンタを無駄に上げたりするような用途位のような気がするんだが。困るのは。
0471nobodyさん
03/07/23 02:19ID:???てか、もう一つページを挟めばいいかな。
適当にがんがって見ます。
0472PHP初心者
03/07/23 21:32ID:8eneuWCZ↓は上のフォームに記述して送信した文字列を下のフォームに表示する、
というものですが、
<body>
<form method="GET" action="form.php">
<p><input type="text" name="text1" size="40"> <input type="submit"
value="送信します" name="b"></p>
<p><input type="text" name="text2" size="40" value="<?php echo $_GET['text1'] ?>"></p>
</form>
</body>
実行すると、
<b>Notice</b>: Undefined index: text1 in <b>C:\Apache Group\Apache\htdocs\samples\form.php</b> on line <b>11</b><br />
というエラーが出ます。どこがおかしいのか、わからなくて困ってます。PHPは4.3.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のちゅーとりあるで紹介されている
一行掲示板をいろいろとこねくりまわしているのですが、
オート・リンクの機能を付けることに躓いています。
ご指導の程、よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています