【PHP】質問スレッドpart21【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/27 18:00ID:???・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
0413nobodyさん
04/09/04 20:40ID:???あと、正規表現の場合とか ( http:\/\/ じゃなくて http:// とそのまま書けるし )。
PHP は定数も含められないし、関数も含められないのも不便。
0415nobodyさん
04/09/04 21:02ID:???'と"を多数混在させる必要があるとき、一々エスケープするのは大変だし、
見づらい(=エラーの元)
|なんか使わないから|でクォートさせろと
0416nobodyさん
04/09/04 21:14ID:???言語の仕様にいちいちつっこむなよ
0417nobodyさん
04/09/04 22:08ID:???qqが好きな人には綺麗でしょうね。
正規表現も希望通り http:// とそのまま書けるし
PHP は定数も含られし、関数も含められますよ。
煽る前に勉強し
0418nobodyさん
04/09/04 22:09ID:???HtmlSpecialChars( $str, ENT_QUOTES ); をやったところ、
「<」 と 「>」 と 「&」 は普通に変換されるんだけど、
「"」 と 「'」 だけ 「\"」 「\?」 になるんですが、
こういうもんなのでしょうか?
StripSlashes( HtmlSpecialChars( $str, ENT_QUOTES ) );
でもいいんですが…。
それと、逆に「<」なんかを「<」に戻す関数ってあるのでしょうか?
0419nobodyさん
04/09/04 22:18ID:???0420418
04/09/04 22:19ID:???×「<」なんかを「<」に戻す
○「<」なんかを「<」に戻す
でした…。
0421nobodyさん
04/09/04 22:19ID:???0422418
04/09/04 22:21ID:???うほ。。
×「<」なんかを「<」に戻す
○「&lt;」なんかを「<」に戻す
0423nobodyさん
04/09/04 22:24ID:???0424nobodyさん
04/09/04 22:49ID:???マニュアル嫁。
> 逆に「<」なんかを「<」に戻す関数
それについてもマニュアルの同区分に目を通せ。
というか、その必要が出てくるって事はエスケープ場所を間違えてる可能性 90%
0425nobodyさん
04/09/04 23:26ID:???php4.3.8で動くのだろうか?
0427nobodyさん
04/09/05 00:26ID:RfIBQAoo0428カポコン
04/09/05 00:43ID:???ttp://f13.aaacafe.ne.jp/~mugen/perlvsphp/child_btype.php
0430質問です
04/09/05 01:34ID:ISJ8aiP8登録したサイトの更新状況を定期的にチェックして、
更新部分を表示してくれるようなスクリプトってありますか?
ぐぐってみたのですが見つからず・・・。
0431nobodyさん
04/09/05 02:13ID:???最近威勢は悪いしソースは隠蔽だしつまんね。
aaacafeはlivedoorになるらしいけど移転しないの?
0432nobodyさん
04/09/05 02:42ID:???0433カポコン
04/09/05 02:46ID:???ふむん、俺はケチって日記に書いてるんだけどねぇ。。。
class blood{
var $child;
function cache($a,$b){
$i = 0;
if(preg_match("/^[aboABO]{2}$/",$a) and preg_match("/^[aboABO]{2}$/",$b)):
$pat = array("A" => "/a/","B" => "/b/","O" => "/o/");
$a = preg_replace($pat,array_flip($pat),$a);
$b = preg_replace($pat,array_flip($pat),$b);
$element[0] = preg_replace("/^(\w)(\w)$/e","\$1",$a);
$element[1] = preg_replace("/^(\w)(\w)$/e","\$2",$a);
$element[2] = preg_replace("/^(\w)(\w)$/e","\$1",$b);
$element[3] = preg_replace("/^(\w)(\w)$/e","\$2",$b);
$i = 0;
foreach($element as $val):
$this->child[$i++] = $val.$element[2];
$this->child[$i++] = $val.$element[3];
if($i === 4) break;
0434カポコン
04/09/05 02:47ID:???else:
echo("<span class=\"msg\">\n");
echo(nl2br("ABOタイプの血液データがありません。\n"));
echo("</span>\n");
endif;
}
function child_judge()
{
$a = $b = $o = $ab = 0;
if(is_array($this->child)):
foreach($this->child as $val):
$a += preg_match("/^(AA|AO|OA)$/",$val)?25:0;
$b += preg_match("/^(BB|BO|OB)$/",$val)?25:0;
$o += preg_match("/^OO$/",$val)?25:0;
$ab += preg_match("/^(AB|BA)$/",$val)?25:0;
endforeach;
endif;
echo("<ul>\n");
$span = "<span class=\"msg\"";
echo ($a !== 0)?$span."<li />".sprintf("生まれてくる子供は<b>A型</b>になる可能性が<b>%d%%</b>あります。<br /></span>\n",$a):"";
echo ($b !== 0)?$span."<li />".sprintf("生まれてくる子供は<b>B型</b>になる可能性が<b>%d%%</b>あります。<br /></span>\n",$b):"";
echo ($o !== 0)?$span."<li />".sprintf("生まれてくる子供は<b>O型</b>になる可能性が<b>%d%%</b>あります。<br /></span>\n",$o):"";
echo ($ab !== 0)?$span."<li />".sprintf("生まれてくる子供は<b>AB型</b>になる可能性が<b>%d%%</b>あります。<br /></span>\n",$ab):"";
echo("</ul>\n");
}
}
使う場合は、インスタンスを作ってからやるように。。
blood::cache()の参照はダメって事・・・。
0435カポコン
04/09/05 02:51ID:???0436nobodyさん
04/09/05 02:55ID:???0437nobodyさん
04/09/05 03:00ID:???0438nobodyさん
04/09/05 03:01ID:???板違い
ついでにいうと、まさしくそのスクリプトを書いている訳だが…
通常はhead取得で十分だが、動的生成だとうまく取得できない場合がある
で、head取得での取得に失敗した場合、ソースから更新日時と判断できる
文字列を正規表現で取得する
これに失敗した場合は、サイズを前のデータと比較して
変化していればその時刻を更新日時として扱う
これさえ満たしていれば、あとはcronで動かすだけで完璧だと思うが
広告が入っている場合、サイズの比較でうまくいかないようだ
とこんな感じだが、おまいも書いてみたら?
0439カポコン
04/09/05 03:07ID:???2ch用にreturnを変えたとか・・ワラ
0440nobodyさん
04/09/05 03:15ID:???2ch用に変えるんなら>で閉じて〜〜〜ワラ
0441カポコン
04/09/05 03:16ID:???0442nobodyさん
04/09/05 03:19ID:???http://qrl.jp/?u=114924
0443カポコン
04/09/05 03:43ID:???0444nobodyさん
04/09/05 03:56ID:???( ゚Д゚)ポカーン
0445nobodyさん
04/09/05 04:08ID:???ばかばかまんこ
0446nobodyさん
04/09/05 04:39ID:???0448nobodyさん
04/09/05 05:15ID:???0449nobodyさん
04/09/05 07:03ID:???この場合重さ・速さなどは CGI/Perl と大差無いと見ていいのでしょうか。
0450nobodyさん
04/09/05 07:16ID:???0451nobodyさん
04/09/05 08:10ID:PtpLgFxVほかにエラーが出てる人はいませんか?もう12時間以上悩んでます・・・
エラーが出た場合の対処方法も添えていただければありがたいです。
対処方法がのってるHPのアドレスでも結構です。
よろしくおねがいしますm(_ _)m
0452nobodyさん
04/09/05 09:07ID:???諸賢の検討によるとPerl>PHPらしいが。
ベンチをとったページがあったはずなので「perl PHP 比較」あたりで
検索すると出てくると思う。
でも今は確かapacheモジュールになってて、Perlのようにバイナリへの
パスを指定すればCGIとして動作するんじゃなかったけ?
特定のサーバについてだからレンタルサーバ板あたりの管轄かも。
>>451
unix系なのかwindowsなのか、はてまたその他なのか…
後、エラー内容を書かんと答えられる人も答えられんよ?
0454449
04/09/05 09:39ID:???>でも今は確かapacheモジュールになってて
いろいろ漁ってみたところ、確かに7月中旬辺りからモジュールになっているようです。
知識が至らずすみませんです。
これを機にPHPを勉強してみます。ありがとうございました。
0455nobodyさん
04/09/05 11:26ID:RfIBQAooarray_pop()やarray_shift()は最初と最後しか取り出せないので
いまのところunset()を使って何とかしているのですがうまいことできますか
0456nobodyさん
04/09/05 11:45ID:???oracleスレでも質問してるのですが
動いたoracle8って
oracle8.1以降の8ですよね?
8.0.xでしたらどうやって動いたのか教えてくださいっす〜
0457nobodyさん
04/09/05 12:04ID:???マニュアルくらい読めよ
ttp://www.php.net/manual/ja/function.array-splice.php
0459457
04/09/05 12:42ID:???オレならこんな感じにする
<?php
$sampleArray=array('hoge'=>'ほげ','bar'=>'ばぁ〜','nullpo'=>'ぬるぽ','ダメポ');
$target='nullpo';// 削除するキー
$length=1;// 削除する数
print "元の配列:";
print_r($sampleArray);
print "<br>";
array_splice($sampleArray,array_search($target,array_keys($sampleArray)),$length);
print "削除後の配列:";
print_r($sampleArray);
?>
0460457
04/09/05 12:45ID:KHirYWNzあ、こっちのほうが良いかな?
<?php
$sampleArray=array('hoge'=>'ほげ','bar'=>'ばぁ〜','nullpo'=>'ぬるぽ','ダメポ');
$target='nullpo';// 削除するキー
$length=1;// 削除する数
print "元の配列:";
print_r($sampleArray);
$deleted=array_splice($sampleArray,array_search($target,array_keys($sampleArray)),$length);
print "<br>削除された要素:";
print_r($deleted);
print "<br>削除後の配列:";
print_r($sampleArray);
?>
0461nobodyさん
04/09/05 13:08ID:???具体的にどうしたいのか書けよ
0463430
04/09/05 17:58ID:ISJ8aiP8レスありがとうございました。
ありそうで以外にないんですよね・・・。
登録した対象のページを自鯖に保存しておいて、
巡回の際に保存しておいたページと比較し、
変化があればその箇所を表示する。
という仕組みではどうですかね。
巡回ページ数が三桁くらいなら問題ないと思うのですが。
0464438
04/09/05 18:58ID:???>登録した対象のページを自鯖に保存しておいて、
>巡回の際に保存しておいたページと比較し、
>変化があればその箇所を表示する。
これをlength取得という
そのやり方をやっていた訳だが、ソースを丸ごと保存していたため、
無料鯖の場合などに含まれる広告のサイズが異なることがあって、
うまく行かなかった
手動で検索開始語句、検索終了語句を予め設定しておいて、
広告を省いた部分で比較するというやり方でやってみたところ
今のところは正常に動いているようだ
http://joechin.hp.infoseek.co.jp/wwwrobots.shtml
上記の各アンテナを参考にするといいだろう
0465nobodyさん
04/09/05 19:34ID:???時刻+プロセスIDでいいと思ったんですけど、プロセスIDってどうやって取るんだろう?
0467465
04/09/05 19:51ID:???ありがとうございます。
こんなのもあるんすね。
ただ、フォームの申込番号として使おうと思っているので、
ちょっと複雑な文字列すぎるかも。
イメージとしては、
[時刻]-[文字列] をIDに申込番号にしようかと思っています。
040905195012-123 みたいな漢字で。
0468nobodyさん
04/09/05 20:08ID:???0470nobodyさん
04/09/05 21:02ID:9EYGYXzi・CGIやSSIは使えない
・.htaccessも使えない
・管理者権限を行使する必要があるものは何もできない
・鯖は管理していない
という環境で特定のIPをアク禁にしたいのですが、
セキュリティ板で訊いたら
「どこかCGIの置けるサイトから,<script src="どっかのcgi">でIPアドレス判定した
スクリプト食わせて、排除したい奴をスクリプトでどっかに飛ばす」
と言われました。
このCGIについての解説サイトを教えてください。
0471nobodyさん
04/09/05 21:29ID:???JavaScript単独ではIPアドレスを取得できないので、
CGIを使ってIPアドレスを取得及び判定する。
その結果を使ってJavaScriptのLocation.hrefかなんかで他のページに飛ばす。
てな所じゃないかなぁ。
CGIを書けない人ならどっかでCGIを使ったアクセス制限CGIを探してきて、
そいつをJavaScriptと組み合わせれば良いかと。
当然、JavaScript Offの人には無効な技だよ。
0472470
04/09/05 21:33ID:9EYGYXziぐぐると自分のところに設置するものばかり引っかかります
0473nobodyさん
04/09/05 21:43ID:???PHP全然関係ないじゃないか
0474470
04/09/05 21:55ID:9EYGYXziWeb制作→セキュリティ→WebProg
と回されてきたもので
0475nobodyさん
04/09/05 22:00ID:???0476470
04/09/05 22:01ID:???この板のアドレスが/php/だったもので代表的質問スレではないかと思って
ごめんなさい
0477nobodyさん
04/09/05 22:05ID:???板違い
ついでに誘導
http://pc5.2ch.net/test/read.cgi/hp/1088604912/
もう二度と来ないでください
0478nobodyさん
04/09/05 22:14ID:???>>470
>この板の質問スレが分からなかったんです
スレ一覧を「質問」で検索したら少なくともここよりは適切なスレが見つかるのにな
>PHPというものがよくわかりません〜
PHPが何か分からなくてもぐぐれば速攻で分かるのにな
っていうか>>1も読んでないだろ
お前みたいなのはどうせ自力じゃ何とかできないだろうから
大人しく.htaccess使える鯖に移転しろ
0479nobodyさん
04/09/05 23:11ID:???板違い厨。
質問の問いに答えれないのなら黙ってろよ。
0480nobodyさん
04/09/05 23:25ID:???久々にでてきましたなー
板違い厨。
質問の問いに答えれないのなら黙ってろよ。
0481477
04/09/05 23:30ID:???必死なだ
喪前の目は節穴か?
忍者にIPアドレス制御があるというのも知らんのか?
つーか厨は来るなって言っただろうが!
知ったかはいい加減氏ね
0482nobodyさん
04/09/05 23:55ID:???言われて初めて気がついた。
そうか2chでWEBプログラミングと言えばPHPなんだな
ニヤリ☆
0483nobodyさん
04/09/05 23:56ID:???カポコンは神
ttp://cgi.f2.aaacafe.ne.jp/~saluru/clrea1/read.php?id=1070375461
0484セキュ板から誘導した奴
04/09/06 00:04ID:???セキュ板で続ける話題じゃないのでこっちの板に誘導したんだが、
http://pc5.2ch.net/test/read.cgi/php/1086715675/l50が良い。
0485セキュ板から誘導した奴
04/09/06 00:17ID:???>>477が言ってるのはhttp://www.shinobi.jp/s-counter.htmlだな。
出来合いのがあるみたいだから、これ使えば良いんじゃないか?
0486nobodyさん
04/09/06 00:23ID:???0487nobodyさん
04/09/06 00:27ID:???馴れ合いが楽しい年頃か。
まぁ、会話して勉強も良いかもな。
がんばれ。
2ch過去ログの書き込み見る限り
自演にしか見えなかったけど。
0488nobodyさん
04/09/06 00:31ID:???(^∀ ^)<オラ!芋ども!
ノ ノ 天下のカポコン様のお通りだ!!!
| | =3 =3 =3プップッー
(芋2) ■■■■■
(芋1 @ @
カポコン イズ ゴッド! カポコン イズ ゴッド!
カポコン イズ 廃人ゲーマー!カポコン イズ 廃人ゲーマー!
CAPOCOM IS PHP!!!CAPOCOM IS PHP!!!CAPOCOM IS PHP!!!
あひる = おめーの頭のポートが甘えーだよ!!!
さんだ = Apache権限なんて捨てっしまえroot権限よりかマシ!
0489nobodyさん
04/09/06 02:44ID:???phpマニュアルを読み、様々な関数の挙動を確かめながら学んでいるのですが
ファイルの最終更新を拾う事についてつまづいています。
自分のファイルはGetlastmod()で取得できました。
しかし、その他ネット上にあるファイルの最終更新が拾えなくて悩んでいます。
filemtime()関数は根本的にだめなようですし、もしかしたら何かhttpヘッダを修得
する方法があるのかと思うのですが、何か勘違いをしているのでしょうか?
自分がやりたいことを纏めると、ブラウザで読み取り可能な複数の外部ファイルの最終更新時刻を
一括で纏めて一つのページに表示したいのです。アドバイス宜しくお願いします。
0491nobodyさん
04/09/06 03:22ID:???Perlの場合、LWP::Simpleモジュールを用いて、対象のウェブサイトの
変更日付の取得が簡単に出来てしまうが、PHPだと簡単にはいかない
http://ns1.php.gr.jp/php-jp/archives/msg11953.html
ここ辺りが参考になる
0492490
04/09/06 03:26ID:???うちではOracle8.0.xクライアント+PHP4.3.xでOra7〜Ora9まで接続実績あり。
また、Oracle8.1.xクライアント+PHP4.3.xでやはりOra7〜Ora9まで接続実績あり。
内容はoracle/oci接続でのSQL操作およびストアド呼び出し。
動作環境はRHL7.x,8,9とVine。Oracleのインストールはスレ違いだから簡便な。
(つってもどっかの本に載っているような普通のインストールだけど)。
0493489
04/09/06 03:49ID:???そのページ凄く勉強になりました。
phpの持つ関数が便利すぎて、使えそうな関数ばかり探していました。
Basic認証を使ったり、工夫してhttpヘッダから拾得するものだったとは。
ありがとうございました。
0494nobodyさん
04/09/06 05:03ID:???PEARのHTTP_Requestクラスでも同じようなことが出来る
require_once('HTTP/Request.php');
$request = new HTTP_Request('http://sample.com/index.php');
$request->sendRequest();
$response_hdr = $request->getResponseHeader();
echo "Last-Modified: ". $response_hdr["last-modified"];
また、HTTP_RequestクラスはProxy経由でのファイル取得にも対応している
0496nobodyさん
04/09/06 08:34ID:???0497456
04/09/06 09:05ID:???oracle8関数ですよね。
オラクル(クライアント)のインストールは
sqlplusでつながってるから大丈夫だと思います。
もしかしてWindows版のPHPもしくはOCIだけの問題なの?
http://www.pat.hi-ho.ne.jp/dimension/bbs/list8.shtml
ここの一番最初の記事の方と同じ現象です。
Linuxでも試してみます。
Linux用のOracleクライアント入手できるかな。。。
0499nobodyさん
04/09/06 10:54ID:???<?php
session_start();
$_SESSION['test'] = "test";
echo $_SESSION['a'];
?>
上記のようなソースで試してるのですが
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at d:\phps\tes6.php:1) in d:\phps\tes6.php on line 3
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at d:\phps\tes6.php:1) in d:\phps\tes6.php on line 3
test
といったエラーが出てしまいます。
php.iniのsession.save_pathは D:/phps/tempで設定してます。
なにがおかしいのでしょうか。。
0500nobodyさん
04/09/06 11:00ID:???<?phpの前に空行とかない?
session_start()する前に何か出力してしまっているYOっていうエラーだ。
FAQなんだけどな。
0501499
04/09/06 11:16ID:???すいません解りました。
空行はないんですが、
私のエディタは、UTF-8でデフォルトで保存するように設定してありまして、
といってもUTF-8は問題ではなく、BOMをつけるようにも設定してしまっていたみたいで、それが原因でのエラーでした。orz
大変お騒がせ致しました。
0502nobodyさん
04/09/06 11:19ID:aNSEkP4I文字列を変換テーブルの通りに変換するような処理を考えます。
$tbl=Array('A'=>'エー', 'B'=>'ビー', 'C'=>'シー',・・・);
$ans=Preg_Replace("/(.)/e", '$tbl[\1]', $str);
これはたいていの場合でうまくいくのですが、たとえば変換対象文字が ']' のような文字だと
うまくいきません('$tbl[\1]' の部分が '$tbl[]]' に展開されてしまうため)。
そこで Preg_Replace の行を
$ans=Preg_Replace("/(.)/e", "$tbl['\\1']", $str);
のような感じにしたとしても、変換対象文字が '\' であったり、シングルクォートだったりすると
うまくいきません。
どんな文字でもうまく変換できる書き方ってありますか?
0503nobodyさん
04/09/06 12:34ID:dx9LAYynWindowsだと、PHPが参照するDLLが入っていない場合、
sqlplusは動いてもPHP側oracle(OCI)は動かない場合有り。
オラクルインストーラでOCIライブラリ関連がちゃんと入っているか
チェックしてみれば?
あとは...PATH(環境変数)くらいか...
0504nobodyさん
04/09/06 12:40ID:???0505nobodyさん
04/09/06 12:44ID:???0506nobodyさん
04/09/06 12:46ID:???0507nobodyさん
04/09/06 12:54ID:???0508nobodyさん
04/09/06 13:01ID:???ひろゆきすげえな
0509340
04/09/06 13:26ID:???フォームメールプログラム(perl)で入力された名前(変数)を
メール送信完了後のphpで、
「$名前様、メールありがとうございます。」
と表示するといったことがしたいのです。
なぜ、phpかというと、phpの方が分かりやすくて好きという厨房な理由です。
というわけで、perlからperlへ変数を渡す方法もよく分かりません。
だれかヘルプキボンヌです。
0510nobodyさん
04/09/06 13:43ID:???0511nobodyさん
04/09/06 13:50ID:???0512340
04/09/06 13:52ID:???■ このスレッドは過去ログ倉庫に格納されています