トップページ⇒php
1001コメント314KB

【PHP】質問スレッドpart21【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/08/27 18:00ID:???
・PHP全般の質問スレです。
・新規質問の方は上げてください。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
0458nobodyさん04/09/05 12:09ID:???
>>457
何番目の要素かわかんないときどうすんの?
045945704/09/05 12:42ID:???
>>458
オレならこんな感じにする

<?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);
?>
046045704/09/05 12:45ID:KHirYWNz
>>459
あ、こっちのほうが良いかな?

<?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:???
>458
具体的にどうしたいのか書けよ
0462nobodyさん04/09/05 13:16ID:???
>>456
oracle使ってるやつがこんなところで質問か。
なんか貧乏くさいよな。
046343004/09/05 17:58ID:ISJ8aiP8
>>438
レスありがとうございました。
ありそうで以外にないんですよね・・・。

登録した対象のページを自鯖に保存しておいて、
巡回の際に保存しておいたページと比較し、
変化があればその箇所を表示する。

という仕組みではどうですかね。
巡回ページ数が三桁くらいなら問題ないと思うのですが。
046443804/09/05 18:58ID:???
>>463
>登録した対象のページを自鯖に保存しておいて、
>巡回の際に保存しておいたページと比較し、
>変化があればその箇所を表示する。
これをlength取得という
そのやり方をやっていた訳だが、ソースを丸ごと保存していたため、
無料鯖の場合などに含まれる広告のサイズが異なることがあって、
うまく行かなかった

手動で検索開始語句、検索終了語句を予め設定しておいて、
広告を省いた部分で比較するというやり方でやってみたところ
今のところは正常に動いているようだ

http://joechin.hp.infoseek.co.jp/wwwrobots.shtml
上記の各アンテナを参考にするといいだろう
0465nobodyさん04/09/05 19:34ID:???
PHPで一番手っ取り早くユニークな文字列を取る方法ってありますか?
時刻+プロセスIDでいいと思ったんですけど、プロセスIDってどうやって取るんだろう?
0466nobodyさん04/09/05 19:39ID:???
>>465
uniqid()
046746504/09/05 19:51ID:???
>>466
ありがとうございます。
こんなのもあるんすね。

ただ、フォームの申込番号として使おうと思っているので、
ちょっと複雑な文字列すぎるかも。

イメージとしては、
[時刻]-[文字列] をIDに申込番号にしようかと思っています。
040905195012-123 みたいな漢字で。
0468nobodyさん04/09/05 20:08ID:???
time()でUNIXタイムスタンプ使えば?
046946504/09/05 20:54ID:???
>>468
Time()でひらめきました。
ミリ秒使えばなんとかなりそうですね。。
(苦肉の策だけど)

ありがとうございました。
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の人には無効な技だよ。
047247004/09/05 21:33ID:9EYGYXzi
アクセス制限CGIはどんなのがあるのですか
ぐぐると自分のところに設置するものばかり引っかかります
0473nobodyさん04/09/05 21:43ID:???
つーか何でここで聞くんだよ
PHP全然関係ないじゃないか
047447004/09/05 21:55ID:9EYGYXzi
この板の質問スレが分からなかったんです
Web制作→セキュリティ→WebProg
と回されてきたもので
0475nobodyさん04/09/05 22:00ID:???
だからなんでphpなんだよ・・・
047647004/09/05 22:01ID:???
PHPというものがよくわかりません
この板のアドレスが/php/だったもので代表的質問スレではないかと思って

ごめんなさい
0477nobodyさん04/09/05 22:05ID:???
>>470
板違い
ついでに誘導
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:???
479 名前: nobodyさん [sage] 投稿日:04/09/05 23:11 ID:???
久々にでてきましたなー
板違い厨。
質問の問いに答えれないのなら黙ってろよ。
048147704/09/05 23:30ID:???
>>479
必死なだ
喪前の目は節穴か?
忍者にIPアドレス制御があるというのも知らんのか?

つーか厨は来るなって言っただろうが!
知ったかはいい加減氏ね
0482nobodyさん04/09/05 23:55ID:???
> この板のアドレスが/php/だったもので代表的質問スレではないかと思って

言われて初めて気がついた。
そうか2chでWEBプログラミングと言えばPHPなんだな
ニヤリ☆
0483nobodyさん04/09/05 23:56ID:???
>>446
カポコンは神
ttp://cgi.f2.aaacafe.ne.jp/~saluru/clrea1/read.php?id=1070375461
0484セキュ板から誘導した奴04/09/06 00:04ID:???
>>470
セキュ板で続ける話題じゃないのでこっちの板に誘導したんだが、
http://pc5.2ch.net/test/read.cgi/php/1086715675/l50が良い。
0485セキュ板から誘導した奴 04/09/06 00:17ID:???
>>470
>>477が言ってるのはhttp://www.shinobi.jp/s-counter.htmlだな。
出来合いのがあるみたいだから、これ使えば良いんじゃないか?
0486nobodyさん04/09/06 00:23ID:???
ここはPHP板
0487nobodyさん04/09/06 00:27ID:???
>483
馴れ合いが楽しい年頃か。
まぁ、会話して勉強も良いかもな。
がんばれ。

2ch過去ログの書き込み見る限り
自演にしか見えなかったけど。
0488nobodyさん04/09/06 00:31ID:???
     (PHP)
      (^∀ ^)<オラ!芋ども!
      ノ  ノ  天下のカポコン様のお通りだ!!!
       | | =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ヘッダを修得
する方法があるのかと思うのですが、何か勘違いをしているのでしょうか?

自分がやりたいことを纏めると、ブラウザで読み取り可能な複数の外部ファイルの最終更新時刻を
一括で纏めて一つのページに表示したいのです。アドバイス宜しくお願いします。
0490nobodyさん04/09/06 03:16ID:???
>>456
ん? 8.0.xも8.1.xも問題なく動いているが?
特に違いなど無い>>PHP configure
0491nobodyさん04/09/06 03:22ID:???
>>489
Perlの場合、LWP::Simpleモジュールを用いて、対象のウェブサイトの
変更日付の取得が簡単に出来てしまうが、PHPだと簡単にはいかない

http://ns1.php.gr.jp/php-jp/archives/msg11953.html

ここ辺りが参考になる
049249004/09/06 03:26ID:???
書き方が激しく不親切だった(w
うちでは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のインストールはスレ違いだから簡便な。
(つってもどっかの本に載っているような普通のインストールだけど)。
049348904/09/06 03:49ID:???
>>491さん
そのページ凄く勉強になりました。
phpの持つ関数が便利すぎて、使えそうな関数ばかり探していました。
Basic認証を使ったり、工夫してhttpヘッダから拾得するものだったとは。
ありがとうございました。
0494nobodyさん04/09/06 05:03ID:???
>>489
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経由でのファイル取得にも対応している
0495nobodyさん04/09/06 08:00ID:???
>>481
この人、何が言いたいのか分からないのだけど?
0496nobodyさん04/09/06 08:34ID:???
妖精と会話してるんだろう。
049745604/09/06 09:05ID:???
>>492
oracle8関数ですよね。
オラクル(クライアント)のインストールは
sqlplusでつながってるから大丈夫だと思います。
もしかしてWindows版のPHPもしくはOCIだけの問題なの?
http://www.pat.hi-ho.ne.jp/dimension/bbs/list8.shtml
ここの一番最初の記事の方と同じ現象です。

Linuxでも試してみます。
Linux用のOracleクライアント入手できるかな。。。
0498nobodyさん04/09/06 10:33ID:???
>>495
なぜだかここにずっと居座って、煽るばかりでロクなアドバイスもした試しのない
知ったかぶりの無能だからほっとけ。
0499nobodyさん04/09/06 10:54ID:???
最近PHPを勉強し始めたのですが、セッション関数のテストでエラーがでます。

<?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:???
>>499
<?phpの前に空行とかない?
session_start()する前に何か出力してしまっているYOっていうエラーだ。

FAQなんだけどな。
050149904/09/06 11:16ID:???
>>500
すいません解りました。
空行はないんですが、
私のエディタは、UTF-8でデフォルトで保存するように設定してありまして、
といってもUTF-8は問題ではなく、BOMをつけるようにも設定してしまっていたみたいで、それが原因でのエラーでした。orz

大変お騒がせ致しました。
0502nobodyさん04/09/06 11:19ID:aNSEkP4I
Preg_Replace について質問です。
文字列を変換テーブルの通りに変換するような処理を考えます。

$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:dx9LAYyn
>>497
Windowsだと、PHPが参照するDLLが入っていない場合、
sqlplusは動いてもPHP側oracle(OCI)は動かない場合有り。

オラクルインストーラでOCIライブラリ関連がちゃんと入っているか
チェックしてみれば?
あとは...PATH(環境変数)くらいか...
0504nobodyさん04/09/06 12:40ID:???
2chもPHPで構築されてるんですよね
0505nobodyさん04/09/06 12:44ID:???
Cときいたが
0506nobodyさん04/09/06 12:46ID:???
アホが湧いてるな
0507nobodyさん04/09/06 12:54ID:???
アホだらけ
0508nobodyさん04/09/06 13:01ID:???
Cかぁ
ひろゆきすげえな
050934004/09/06 13:26ID:???
>>340でperlからphpにどうやって変数を渡すの?と聞いたものです。
フォームメールプログラム(perl)で入力された名前(変数)を
メール送信完了後のphpで、
「$名前様、メールありがとうございます。」
と表示するといったことがしたいのです。
なぜ、phpかというと、phpの方が分かりやすくて好きという厨房な理由です。
というわけで、perlからperlへ変数を渡す方法もよく分かりません。
だれかヘルプキボンヌです。
0510nobodyさん04/09/06 13:43ID:???
(´-`).。oO(じゃあPHPのフォームメール使えばいいだろ・・・)
0511nobodyさん04/09/06 13:50ID:???
普通にポストでもすればええやん。
051234004/09/06 13:52ID:???
(´-`).。oO(残念ながらPHPで適したフォムメルが見つからないんです・・・)
051334004/09/06 13:53ID:???
>>511
ポストってアドレスの後につけるあれのことでしょうか?
0514nobodyさん04/09/06 14:00ID:???
>>513
HTMLからやり直し
051534004/09/06 14:09ID:???
POSTの場合、フォーム入力が必要になりますよね、
フォーム入力させるのは無理なんです。
メールフォームの関係上
0516nobodyさん04/09/06 14:14ID:???
>>515
全部Perlでやりゃいいじゃん・・・
拾い物に少し手を加えればいいだけだろ?
0517nobodyさん04/09/06 14:15ID:???
>>513
アドレスの後についてるのはゲットじゃないかな?
0518nobodyさん04/09/06 14:22ID:???
(´-`).。oO(>>512 ソンぐらい作れよ)
0519nobodyさん04/09/06 14:30ID:???
>>518
html部分が面倒なんだよな・・・・

052034004/09/06 14:45ID:???
単純にGET使ってみたんですが、これって何か問題ありますかね?
0521nobodyさん04/09/06 14:49ID:???
お前が何かする都度質問するのか?
答えなきゃならんのか?
052234004/09/06 14:53ID:???
>>521
GETを使えという方が一人もいらっしゃらなかったもので
まさか皆さんが思いつかないような方法を僕ごときが思いつくとは
思えませんのでねぇ
0523nobodyさん04/09/06 14:56ID:???
>>522
藻まえが思ってるほどここの住人頭よくない
基本的にプログラミングなんて社会の底辺がすること
0524nobodyさん04/09/06 14:59ID:???
茶碗は左、箸は右
0525nobodyさん04/09/06 15:10ID:???
>522
お前は天才だ。
何も教えることは無い。
一人で何でもできるだろう。
0526軟式PHP04/09/06 15:15ID:???
>>523
同意。
でも楽しいからいいよ。・゚・(ノ∀`)・゚・。
0527nobodyさん04/09/06 15:17ID:???
GETメソッドはブラウザの履歴に値が丸々残る。
送られた方にはあまり関係ないが、送る方の都合やメールという方向性を考えた場合
送信側のリスクは大きくなるだろうね。
ネットカフェや不特定多数が使う端末なんかで個人情報漏洩する事も考えうる。
052834004/09/06 15:24ID:???
>>527
なるほど、名前だとかなりリスクありますね・・・。
他の方法考えます。サンクスです
0529nobodyさん04/09/06 16:20ID:???
>>528
>>527の理由でゲットは誰も言わなかったんだろうね。
0530nobodyさん04/09/06 18:06ID:???
つーか、フォームメールでGETなんかありえない
文字数制限あるし
0531軟式PHP04/09/06 20:02ID:???
制限は問題ないでしょう
0532軟式PHP04/09/06 20:22ID:???
偽者キタ━━━━(Д゚(○=(゚∀゚)=○)Д゚)━━━━━!!!
そしてまた台風きそうだよ(´・ω・`)
0533nobodyさん04/09/06 20:41ID:???
>>531
今回の場合、名前だからね。
まさか、ジュゲムジュゲム・・・・な人はこないだろうし。
0534nobodyさん04/09/06 22:34ID:???
>>533
この人って、メールフォームは Perl で、submit後のメール送信までは Perl でやるんだよね。きっと。
で、メール送信が終わったら、完了画面を出すために、Location で PHPスクリプトに移動するってことなのかな。
そこで送信者名だけをパラメータとして引き回すなら、GET でもこと足りそうだね。

でも、わざわざそれしきのことのために別スクリプトに移動しなくてもなぁ、と思うよ。
基本的に HTML に変数埋め込み程度しかできない人なのかな。
そうだったとしても、Perl スクリプトに手を入れてみるくらいのことは出来そうだけどね。
ちょっとがんばってみたら? >>340
一番シンプルかつ簡単な解にたどり着けると思うよ。
0535nobodyさん04/09/06 23:25ID:???
PHPカワイイよPHP〜
0536カポコン04/09/06 23:29ID:???
天下泰平、めでたし、めでたし。
0537nobodyさん04/09/07 01:04ID:???
>>491さん>>494さん
経過としては
HEADリクエストで返ってきたヘッダを1行ずつ配列に組み込み
そこからLast-ModifiedをGMT標準時間で取得し
strtotime関数でUNIX標準の時間表記に直してGMT+9の値を取得。

ここまでの事が短時間に勉強できて感動です。
ありがとうございました( つ∀`)
0538nobodyさん04/09/07 11:13ID:kzLAff5m
>>402
簡単にできると思ってやってみましたが" target="_blank"入れると、エラーになりますね…
>>404
php理解してないと、どこに" target="_blank"を入れるかわからないのでは?
0539nobodyさん04/09/07 11:18ID:???
>>538 = >>402 ;
#HTMLの勉強して下さい。
0540軟式PHP04/09/07 11:35ID:???
>>538
http://tohoho.wakusei.ne.jp/html/a.htm
0541軟式PHP04/09/07 11:35ID:???
どうしてもダメっつんなら、baseで全部ブランクにしてしまえ(藁
0542nobodyさん04/09/07 11:41ID:???
>>538
target='_blank'
にしる。
0543nobodyさん04/09/07 11:51ID:???
>>538=>>402
自作自演の勉強して下さい。

\"$url\"
この「\"」ってのがダブルクオートのエスケープシークエンスだって解んないかな。
echo "で始まってるんだからダブルクオートそのままじゃechoを閉じちゃうじゃん。
target=\"_blank\"だったり>>542だったりtarget=_blankだったり手法は幾つかあるわけで。
つーかぶっっちゃけなんも弄ってないだろ
0544nobodyさん04/09/07 11:53ID:???
なんだっていい。もうお腹いっぱい。
PHPの話がしたい。
0545nobodyさん04/09/07 11:57ID:???
データベース(mySQL)で読み書きする掲示板を作ろうと思うんですが、
ロック機構かなんかを付けて重複処理を見張らないと危ないですか?
0546nobodyさん04/09/07 13:18ID:???
>>545
基本的に多人数で読み書きするものには、ロックは必要です。
データベースの設計によっては自動的に行われるロックで十分なこともあるし、
自分で明示的にロックしなくちゃいけないこともあります。

なんでロックしなくちゃいけないか、その理由を考えれば答えが出ると思います。
0547nobodyさん04/09/07 13:37ID:???
なんで質問スレなのに>>546のようなレスする厨が居るんでしょうね
0548nobodyさん04/09/07 13:40ID:???
>>547
回答に必要な材料がそろってないからでしょ。
0549nobodyさん04/09/07 13:42ID:???
>547
ごちゃごちゃ言わずにお前が答えれば早いだろ
0550nobodyさん04/09/07 13:56ID:???
>>546=>>549
( ´,_ゝ`)

こういう無駄な煽り合いを避けるためにもさっさと君が答えればいいのに
0551nobodyさん04/09/07 13:59ID:???
そしておまえが
>>545=>>550
055254704/09/07 14:01ID:???
>>547=>>550でしたと
0553546=54804/09/07 14:02ID:91MbvsBk
>>550
はずれ。

個人特定は置いといて、無駄な煽り合いを避けるために、おまえが早く答えてやってくれ。
おれは >>545 の質問を読んだ限りでは、>>546 の回答で精一杯だ。
0554nobodyさん04/09/07 14:03ID:???
>>545
普通にinsertするだけならlockもtransactionもいらないんじゃない。
0555軟式PHP04/09/07 14:14ID:???
いらないね。同時書き込みしてもファイルみたいにぶっ壊れることないし。
まぁ整合性を取らないといけないような仕様だったら必要だけど。
0556nobodyさん04/09/07 14:16ID:???
文字列の中に変数がある場合、
その変数を文字列ではなく変数として扱うにはどうしたらいいのでしょうか?
具体的には下の例でdear_papaと出力する場合です。
宜しくお願いします。

string.txt
----------
dear_$mama
----------

<?php
$string = readfile("string.txt");
$mama = "papa";
echo $string;
?>
0557nobodyさん04/09/07 14:24ID:???
これで無理かな
確認は取ってない

----string.txt------
<?php
echo "dear_".$mama;
?>
--------------------

<?php
$mama = "papa";
include("string.txt");
?>
0558nobodyさん04/09/07 14:24ID:???
>>556
string.txt の内容を

dear_<?=$mama?>

みたいにすれば、

<?php
$mama="papa";
include 'string.txt';
?>

でいけるけど、どうよ?
■ このスレッドは過去ログ倉庫に格納されています