【PHP】質問スレッドpart16【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/04/07 01:06ID:HTcWOpWf上級者用や雑談スレを立てたくなった場合は後から適宜立ててください。
■本家
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-5
0455nobodyさん
04/04/27 21:56ID:???http://ahya.org/aiueo/?a=1mode=all&exec=true
echo $_SERVER['QUERY_STRING']; //a=1mode=all&exec=true
echo $_REQUEST['a']; //1
echo $_REQUEST['mode']; //all
echo $_REQUEST['exec']; //true
$_REQUESTはGET,POSTどちらのメソッドの場合でもおk
$_GETはGETの時のみね
$_POSTはPOST〃
0456nobodyさん
04/04/27 22:04ID:???折角URLまで書いていただいてありがたいのですが404ですた…。
正直説明するのも骨が折れると思われるので、誘導して頂けません?
0458nobodyさん
04/04/27 22:04ID:+FvBbqtX出力が出ないです。空白のままのようです。
ちなみに、includeではtest.cgiのテキストが表示されました。
0460nobodyさん
04/04/27 22:06ID:???いや・・・
”例え”だよ
しかもphp省略しちゃって分かりにくかったかな
http://ahya.org/aiueo/test.php?a=1&mode=all&exec=true
test.php
<?php
echo $_SERVER['QUERY_STRING']; //a=1mode=all&exec=true
echo $_REQUEST['a']; //1
echo $_REQUEST['mode']; //all
echo $_REQUEST['exec']; //true
?>
>>457
&忘れてた、、スマソ
0462nobodyさん
04/04/27 22:18ID:+FvBbqtX<?php system("/usr/bin/perl test.cgi");?>
なにもでないです。。゜゜(>ヘ<)゜ ゜。ビエェーン
0463nobodyさん
04/04/27 22:21ID:+FvBbqtXでは、新しいウィンドウ開いちゃいます。。。
0465462
04/04/27 22:23ID:+FvBbqtX0467462
04/04/27 22:28ID:+FvBbqtXtest.cgiにも書かれてます
0468nobodyさん
04/04/27 22:29ID:???0470nobodyさん
04/04/27 23:42ID:???0472467
04/04/28 04:29ID:GhugZwA8私の環境ではシステム関数は使えないようでした。
あきらめ掛けたのですが、やれました。
参考にしてください。
table 内で直接perl-cgiを呼ぶのではなく
一度、phpファイルをかませたら出来ました!
<table><tr><td>
<?php include "test.php";?>
</td></tr></table>
test.phpは
<?
require("http://・・・・・/test.cgi";?>
0473467
04/04/28 04:30ID:GhugZwA8私の環境ではシステム関数は使えないようでした。
あきらめ掛けたのですが、やれました。
参考にしてください。
table 内で直接perl-cgiを呼ぶのではなく
一度、phpファイルをかませたら出来ました!
<table><tr><td>
<?php include "test.php";?>
</td></tr></table>
test.phpは
<?
require("http://・・・・・/test.cgi");
?>
0474nobodyさん
04/04/28 14:09ID:???0475nobodyさん
04/04/28 14:15ID:???http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=php+16%E9%80%B2+10%E9%80%B2+%E5%A4%89%E6%8F%9B&lr=
0476nobodyさん
04/04/28 17:12ID:???中途半端に教えるのやめれ。
>>474
http://jp.php.net/manual/ja/function.hexdec.php
hexdec関数。
0478nobodyさん
04/04/28 21:42ID:???0479nobodyさん
04/04/28 23:14ID:???echo <<END_OF_RES
{$ahya['goruxa']}
{$nullpo->gaxtu}
END_OF_RES
0481nobodyさん
04/04/29 13:22ID:???print<<<HOGE←ここってどうしてる?
俺はEODにしてるがEOM,EOCとかもあるし。EOFはなんか違う気がするが。
0483nobodyさん
04/04/29 13:39ID:???で統一してマス。EOH とかだけだとなんか短すぎて不安。
0484nobodyさん
04/04/29 13:39ID:???0485nobodyさん
04/04/29 14:06ID:???俺は、echo<<<HTML
HTMLくらしかヒアドキュメントに書かねーし。
つうか、EclipseM6(まだM8にしてない)が、
<<<Hまで打ったとこで激しく重くなって死にはしないんだけど、
エラー吐いて、HTML打ち終わるまで激重になるのが鬱。
M8で改善されてるのかな・・・
0486nobodyさん
04/04/29 14:07ID:???0487nobodyさん
04/04/29 14:13ID:???smarty等テンプレート使うようになってヒヤドキュメントは
全然使わなくなったけど。
>>486
ワロタ エラー時の出力部分にはいいかもしんない。
0488nobodyさん
04/04/29 14:14ID:???0489nobodyさん
04/04/29 14:25ID:nRyNoo3z「ice001」とか「straight002」と言う文字の数字の部分を
取り除いて「ice」「straight」としたいのですがどのようにすれば
よいのでしょうか?
0490nobodyさん
04/04/29 14:42ID:???001とか002が3桁固定なのであれば、
$string_and_number = "ice001";
$string_only = substr($str, 0, -3);
0492nobodyさん
04/04/29 14:52ID:???0494nobodyさん
04/04/29 16:42ID:???使用OS WinXP
Apache 1.3.29
PHP 4.3.6
httpd.confに
LoadModule php4_module C:/php/sapi/php4apache2.dll
これを書いてもApache起動時に
cannot load C:/php/sapi/php4apache2.dll into server:(126)指定したモジュールがみつかりません
上記のように出てきて、apacheが起動できません。
「C:/php/sapi/php4apache2.dll」自体は、ブラウザにコピペして存在を確認しています。
もちろん、LoadModuleをコメントアウトするとApacheは動きますが、
PHPを動かすことはできません。
どうすればよろしいでしょうか…
0495nobodyさん
04/04/29 16:46ID:???あとApache1だとAddModuleも必要じゃなかったっけ?
0496nobodyさん
04/04/29 16:56ID:???0497nobodyさん
04/04/29 17:23ID:???すみません、Apache1じゃなくて2を入れなおして設定しなおしたらうまくいきました。
ありがとうございます。
クソ質問してごめんなさい、100回くらい吊ってきます…
0499nobodyさん
04/04/29 21:37ID:???0500nobodyさん
04/04/29 21:56ID:???文字列検索に使える関数と言えば
strposとかstrstrとか色々ありますよね。
で、ある文字列の中に任意の文字列が含まれているかどうか、ということだけを調べるのが目的の場合、
一番速い関数って何なんでしょうか?
0503500
04/04/29 22:09ID:???っていうか、マニュアルで、文字列が含まれてるか否か、という関数を探してたらみつからなかったんで、
どこにあるんだろう、と。
最初に見つかった位置を返す、とかばっかりで、そんな丁寧なことしてくれちゃってる間に、
速度が落ちてるんじゃないかと心配で。
もしかして、文字列が含まれてるか否か、だけを調べる関数ってないんでしょうか?
もしないんだったら、こういう場合は普通みなさんはどの関数を使ってらっしゃるんでしょうか。
一般的なお答えで結構です。
ちゃんと説明するとちょっと質問の方向がズレちゃってすみません。
0504nobodyさん
04/04/29 22:13ID:???被ったついでに
http://www.php.net/manual/ja/function.microtime.php
スクリプト中は何回か回して、またスクリプトも何度か動かして
平均とらなきゃ駄目だよ。
0505nobodyさん
04/04/29 22:17ID:???explodeで区切り文字に指定したい文字が二つ以上だったらどうすればいいんでしょうか。
explodeで出来た配列の一つ一つに再びexplodeをかけていって、
できあがった全ての配列を一つの配列に代入する、といった手順を踏めばできそうですが、
もっと簡単な方法があれば…。
よろしくおねがいします。
0506nobodyさん
04/04/29 22:17ID:???一気にfile()で読み込むのとではどっちが負荷・信頼性の面で良いのでしょうか?
0507nobodyさん
04/04/29 22:19ID:???文字列を探す時にアルゴリズムの"副産物"で
見つかった位置が得られるんだよ。<strpos
まあ普通でも使うから値も返してるのだけど。
0508nobodyさん
04/04/29 22:21ID:???一般的に後者。
マニュアルくらい読め
0512nobodyさん
04/04/29 23:33ID:???自前で"1a345abc9"という文字列から"ab"という文字列を
検索する「ベタな」アルゴリズム作ってみれば判る。
(マルチバイトは取り合えず考慮しないで)
0513nobodyさん
04/04/29 23:47ID:???if(str_exist()){ strpos()云々 } (str_exists : 文字が見つかったらtrueを返す超絶便利関数)
って感じで同じ文字列を二度も走査することになるからなぁ。
0514nobodyさん
04/04/30 10:51ID:acYJBbCx以下スクリプトの「この部分」って所が多重でログに残るんですよ。
$logFileNameが10行あれば、何故か10回書き込まれてしまう。
なんかマズイ書き方してます?
$line = file ($logFileName);
$fp = fopen ($logFileName, "wb");
flock ($fp, LOCK_EX);
fputs ($fp, $dat); // この部分
foreach ($line as $value){
fputs ($fp, $value);
}
flock ($fp, LOCK_UN);
fclose ($fp);
レン鯖環境
PHP 4.3.6
Apache 1.3.29
Redhat Linux 7.0
自宅鯖環境
PHP 4.3.1
Apache 1.3.24
Win98 SE
0515nobodyさん
04/04/30 11:20ID:wgal4sz4$_SERVER['HTTTP_REFERER']
を取得したら空文字がかえってきました。
どうすれば取得できますか?
0516515
04/04/30 11:23ID:???0517515
04/04/30 11:24ID:???質問は生きてます。
0519518
04/04/30 11:32ID:???0521nobodyさん
04/04/30 11:44ID:???リファラをあてにするな
適当な文字列を設定することも容易だし
リファラを渡さない実装や、ブロックする実装もある
取得出来なかった場合、諦めろ
0522nobodyさん
04/04/30 11:47ID:???0523515
04/04/30 11:50ID:???WinのIE6は取得不可能ってことなんでしょうか?
それが知りたいのですが。
よろしくお願いします。
0526nobodyさん
04/04/30 12:20ID:NAmcrNhQ現在のページに遷移する前にユーザーエージェントが参照していた ページのアドレス(もしあれば)。これはユーザーエージェントに よってャZットされます=B
全てのャ�[ザーエージャFントがこれをャZットし ているわけではなく、また、HTTP_REFERERを 変更する機能を持つものもああります。
要するに信頼するべきものでは ありません。 ←重要
0527nobodyさん
04/04/30 12:27ID:WYN4ZqJ6構文エラーがあったとき、dos窓がすぐに閉じてしまいます。
何とかならないのでしょうか?
0528526
04/04/30 12:27ID:???マニュアルのコピペなので勘弁してください
ageちゃってスマソorz
0529514
04/04/30 12:52ID:???自己解決しました。。。
この書き込み部分を関数化して読み込んでたんですけど、外側でforeachが動いてました。
お騒がせしてしまい申し訳ございませんでした。。。
0530nobodyさん
04/04/30 13:43ID:sYZVZspKEUC-JPのため、文字化けしないか心配です。
環境はWindows2000+Apache1.3.29+PHP4.2.4です。
この環境でPostgreSQLとやりとりした場合、文字化けは起こるのでしょうか?
また、起こるとしたら、どのような対処法が一般的なのでしょうか?
今、現在はMySQLと接続したりするアプリケーションでは、PHPのソースコードをShift_JISで
書いているんですが、EUC_JPで書けばPostgreSQLとの接続の際の文字化けは防げると思うんですが
Apacheはうまく機能してくれるんでしょうか?(EUC_JPでPHPのソースコードを書いた場合です)
これから、CygwinとPostgreSQLをインストールするので、その段階での注意点みたいのも
あったらよろしくお願いします。
他サイトで質問してもこれといった返事が返ってこなかったり、書籍、インターネットで調べても
Linuxでのやり方しか書いていないので、情報が0です。
マルチポストですが、よろしくお願いします。
0531nobodyさん
04/04/30 13:55ID:???んなこたぁねーだろ?
0532530
04/04/30 13:59ID:???WinのApacheを触ったことないということは、Unixばかりの人なんですか。すごいですね。
Unixを勉強したいと思うんですが、金がなくて。。
Javaをやっていたころ文字化けでむちゃくちゃ悩まされたので、今度は事前に困らないようにと思いまして。。
EUCでおかしくならないなら、それに越したことないですね。
ありがとうございました。
0533nobodyさん
04/04/30 14:03ID:???EUC-JPで書けば無問題のはずだが。
ま、PHPのソースをSJISで書いているみたいだけど、その様子だと
ちゃんとSJISに対応したPHPをインストールしているか疑問だな。
SET CLIENT_ENCODING でPHP(SJIS)<->PgSQL(EUC-JP)の
変換をPgSQL側でやってくれる。PHPはSJISのまま突っ込めばOK
0534nobodyさん
04/04/30 14:35ID:AdzajIxF$db=new authDBSample; //DBアクセスインスタンスコピー
$db->query("SELECT * FROM master where dat='".$_POST['year']."-".$_POST['month']."-".$_POST['day']."'");
$db->p("name");
上の文を実行するとエラーも値も何も出てこない。ちなみに
print($db->num_fields());
print($db->num_rows());
を実行するとフィールドが「5」、行が「1」と出力される。セレクトされてるレコードはあるようなんだけど値を出力する
$db->p("name");
がうまく表示されない。
MySQLを直接たたくと、ちゃんと1レコード出てきてました。フィールド名も合ってました。
どしてダロ。
0535530
04/04/30 14:37ID:???>ちゃんとSJISに対応したPHPをインストールしているか疑問だな。
入門本に書いてあるとおりやったんで、僕は実のところ全然分かりません。
今のところは一応作動しているので。。
SET CLIENT_ENCODINGをインターネットで調べたところ↓が見つかりました。
> pg_exec("SET CLIENT_ENCODING = 'SJIS'");
> というおまじないを入れると、PostgreSQL が出力データを SJISにしてくれます。
これは、どこへ書けばよいんでしょうか??php.iniにでも書くのか、ソースコードに書くのか。。
どうもすみません。PHPは本当によくわからないし、今度就職するところがPHP+PostgreSQLとかMySQLを
使用するみたいなんで、切羽詰まっております。よろしくおねがいします。
0536530
04/04/30 14:40ID:???についてですが、まだ、CygwinとPostgreSQLをインストールしていないので
なかなかそこまでいけないので、暇な方が回答していただければ幸いです。そこまで
急いでいないので。。
どうもみなさんありがとうございました。CygwinとPostgreSQLをインストールしてから、
自力でやってみようと思います。本当に助かりました。
0537nobodyさん
04/04/30 14:50ID:???pg_execってまた古そうなソースだな。
どこに書くか、それ見て判らんようだと....勉強汁。
で、どの入門書を見たか知らんけど、
echo "表";
が正しく動くかな。
0538515
04/04/30 15:00ID:???0539530
04/04/30 16:12ID:???正しく動きますが。。
普通にMySQLとのWEBアプリケーションとやらは組めます。
PostgreSQLもやる必要があるみたいなのでしつもんしました。
ちなみに入門書は↓をみました
http://www.cbook24.com/bm_detail.asp?sku=4798006696
>pg_execってまた古そうなソースだな。
>どこに書くか、それ見て判らんようだと....勉強汁。
どこに書けばよいんでしょうか??これが分からないと本当に勉強が先にすすまないので。。
書籍等は、本当にLinuxばかりでWindowsからPostgreSQL接続は0なんですよ。大きな書店を
はしごして調べたけど、ありませんでした。
本当に困っております。。
0540nobodyさん
04/04/30 16:24ID:???本当に組めるのならpg_exec (= pg_query)をどこに書くか判るはずなんだが。
どこに書くか教えてもらったところで、この先に進めるとは到底思えないのだが。
つーか、釣られているのか...
0541530
04/04/30 16:29ID:???どうもありがとうございます。分かりました。mysql_query()みたいな関数ですね。どうも。
じゃー、ソースコードに書けば良いんだ。
理解できました。関数か、それともphpの設定に使うのかちょっとわからなかったので。。
もう本当に解決しました。
釣りだったのかどうかしりませんが、理解できて本当に感謝しています。
今からPOSTGRESQLをインストールしてかって、PHPとPostgreSQLの本を見に行こうと思います。
本当にありがとうございました。
0542nobodyさん
04/04/30 16:31ID:???PHPはEUC or UTF-8、 PostgreSQLはcreatedb時にEUC_JP or UNICODEを指定。
php.iniで文字コード関係の設定せず、apacheはAddDefaultCharsetをnoneにしただけ。
cygwin 1.5.5-1
cygipc 2.02-1
postgresql 7.4-1(これら3つはcygwinのsetup.exeからインストールしたもの)
apache-2.0.49-win32
php-4.3.5-win32
phpの文字コード関係の設定は、オンラインマニュアルにうまくまとまってたよーな。
0543nobodyさん
04/04/30 16:31ID:???勉強する姿勢は大変結構だけど、この分だとここがあなたのためのスレになってしまう
(ま、進行遅い板だからそれでもいいんだけど)
たぶん即戦力としては期待されてないからさ
2chに頼るより就職してから先輩方にしごかれてください
0544533,537,540
04/04/30 16:49ID:???pg_set_client_encoding()
って書いたら怒られるかなw
0545530
04/04/30 16:50ID:???私の環境もほとんど似たようなものです。どうもありがとうございました。
実際にそれで動いているということで、大変安心しました。
本当にお騒がせしましてすみませんでした。
私は本当にPHP初心者なのですが、それでも理解できるように書いてくださって、
本当に感謝しています。
>>543
どうも、すみません。これ以降私の質問は、終わりにしたいと思います。大概は
本で解決できるのですが、これだけはどうしても自力で解決できなかったのですから。。
就職する前に最低限のPostgreSQL接続の基本くらいは知りたかったもんですから。。
しばらく、質問は控えたいとおもいます。どうもすみませんでした。
回答してくださったみなさん、どうもありがとうございました。
0546530
04/04/30 16:54ID:???(;-_- まじですか!?
それだけなんですか。。。
頼みますよ。必死でいろいろ調べたのに。。
書籍はLinuxを前提として書いてあるので、この文字コード変換については書かれていないんですよ。
インターネットも同様です。。
まー、いいです。一番手っ取りばやい解決方法はそれなんですね。どうもありがとうございました。
かなり感謝してるのと、疲れたということで、複雑な心境です
0547530
04/04/30 16:57ID:???これから、本屋へいくので、これ以上、からかわないでくださいね。
ではでは。
0548533,537,540老婆心
04/04/30 17:09ID:???一番手っ取り早い解決方法を教えてもらって、それで解決したって思っちゃダメだよ。
せめてSET CLIENT_ENCODING というSQL文を知った上でpg_set_client_encoding()を使うならまだいいけど、
SJISを用いるときのお呪い程度の知識じゃ、どうせこの先躓く。
MySQLとPgSQL両刀使いの会社に就職したんならなおさらだな。
0549nobodyさん
04/04/30 18:50ID:8pcmBsOy<?php $com = array(
'<a href="">テキスト</a>',
'<a href="">テキスト</a>',
'<a href="">テキスト</a>',
);
srand(time());
print $com[rand(0,count($com) - 1)];
?>
この様なリロードする度にリンクテキストが変わる
phpを書いみたのですが、二つ同じページに設置すると
毎回二つとも同じテキストが出てしまいます。
組み込んだテキストを完全ランダムに表示させるには
どうしたら良いでしょうか?
0551nobodyさん
04/04/30 21:37ID:???Wikiなどでよく見かける、ページ表示処理速度を表示させるには
どうしたらいいでしょうか?
microtimeを使うんでしょうかね・・
0553nobodyさん
04/04/30 21:43ID:???そこ見てたんですが、勉強不足なもんで
いまいち分かりませんでした。
0554nobodyさん
04/04/30 21:49ID:???最初の
<? $CPU_start=microtime(); ?>
で時刻をとっておいて、最後にまた時刻を取得して引き算。
list($tmp1,$tmp2)=split(" ",$CPU_start);
list($tmp3,$tmp4)=split(" ",microtime());
ここら辺の処理は違う方法があるきがするが。
■ このスレッドは過去ログ倉庫に格納されています