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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/11/01 04:09:15ID:???
・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 
0751nobodyさん04/11/17 12:42:17ID:???
>>749
http://jp2.php.net/manual/ja/function.strtr.php
0752nobodyさん04/11/17 12:56:44ID:???
>>749
大文字->小文字ならstrtolower()
0753nobodyさん04/11/17 13:15:02ID:???
>>751-752
ありがとうございました。
一部だけ小文字にしたいので strtr を使おうとマニュアルを見たら
> 引数を2つ指定してコールっ_場合
なんてのが。
075469504/11/17 14:02:03ID:???
>>748
最終的に検索クエリが遅いのは明らかなので、
ページングした際に再度クエリを投げないで済めば
早くなるのはわかっているんです。
なので、limit掛けない結果をキャッシュするしかないかなぁ?
ってのが>>742です。

>>750
文字列マッチでの検索とかした場合ですか?
シーケンシャルに読むだけならクエリー自体が軽いので、
ページングしても重くならないと思います。

もし文字列マッチでも早いなら、ソース見るしかないですかね・・・。
0755nobodyさん04/11/17 14:12:32ID:???
デストラクタ的な後処理の為に、register_shutdown_function
を試しているのですが、register_shutdown_functionに登録された
関数内において、ログファイルの書き出しも、クラスファイル等のincludeも
いずれもpermissionエラーとなって実行できないのですが、
register_shutdown_functionの実行権限は、mainの処理とは異なるのでしょうか?
バージョンは4.2.3です。
0756nobodyさん04/11/17 15:06:42ID:???
10万件のデータから中間一致検索しても一回当たり0.05秒掛からず
返ってくるけど。
0757nobodyさん04/11/17 15:11:44ID:eshx/1+6
すいません、亀レスな上に横から質問で悪いんですが
>>688で可変長引数の質問について教えてください。

function test() {
list($a, $b, $c) = func_get_args();
}
のように、可変長引数にするメリットはなんでしょうか?
あんまり思いつかないのですが…。

>>691で言われているようにデフォルトを与えた方が
楽な気がします。
0758nobodyさん04/11/17 15:22:26ID:???
windows版のapacheでSSL_FTP()を使いたいのですが、
apacheをどのような設定にすれば使用出来るようになるのでしょうか?
0759nobodyさん04/11/17 15:23:49ID:???
>>757
俺もそう思う。
そもそもperl臭いのが嫌だ。
0760nobodyさん04/11/17 15:35:58ID:???
>754
文字列マッチの場合なり
076169504/11/17 16:04:49ID:???
>>756
どひゃー。

ちょっと検索対象のフィールドの定義と、
1レコードのバイト数(概算)教えてもらえますか?
(中間一致ならindexは効かないですもんね)

他になにかやらかしてそうな設定ってあるかな・・・
0762nobodyさん04/11/17 16:09:58ID:???
SQLからスピードを取ったら何が残るの?w
0763nobodyさん04/11/17 16:12:20ID:ewTnqAG8
$aと$bと二つの配列があり、$aの値がone,two,tree、$bの値がtree
だとした場合、二つをマッチングさせて、マッチしたら1,マッチしなかたら
0を入れた配列$cを作りたいのですが、可能でしょうか?
$cの値は、0,0,1としたいんです。

どういうことかといいますと、$aが商品番号の配列。$bがユーザが持って
いる(購入済)商品番号。この情報から購入フラグ(購入済み0,未購入1)
配列を作りたいんです。どうかお知恵をお貸し下さい。よろしくお願い
致します。
0764nobodyさん04/11/17 16:12:37ID:???
数百万なら俺も考えるが、数十万ならSQL+最近の鯖PCなら全然気にしない。
076576304/11/17 16:15:42ID:ewTnqAG8
すいません。追記です。
出来ましたら、$cは連想配列にして、echo $c[one];としたら0
と出したいんです。自分にはむずかしすぎて、取っ掛かりさえつかめない
状態です。
0766nobodyさん04/11/17 16:35:41ID:???
>>761
フィールドは text。
1レコード15000バイトぐらい。
076774804/11/17 16:42:06ID:???
>>754
いやぁ、私が言いたかったのは、別に自前でキャッシュなんてしなくても、
limitかけないでクエリー発行して、mysql_data_seek()をつかえば、
MySQLの方でやってくれるぞ。って話で。

その際システム側でどんだけメモリなりのリソース食うかは預かりしらんが、って事で。
0768nobodyさん04/11/17 16:51:04ID:???
>>765
どのへんがどうわからないの?答えようにも自分には(質問の意図をつかむのが)むずかしすぎて、取っ掛かりさえつかめない状態です。

とりあえず「いち、に、木」はやめよう。
0769nobodyさん04/11/17 16:52:34ID:???
ワロタ
077076804/11/17 17:01:31ID:???
>>765
あれだけじゃ悪いから、スマートじゃないけど分かりやすい例ね。配列関連の関数を探すともうちょっと上手くかけるよ。
$a = array('one', 'two', 'three');
$b = array('three');

foreach ($a as $shohin) {
foreach ($b as $konyuzumi) {
if ($shohin == $konyuzumi) {
$c[] = 1;
} else {
$c[] = 0;
}
}
}

echo $c[0],'<br />';
echo $c[1],'<br />';
echo $c[2];
077169504/11/17 17:07:52ID:???
>>766
となると、MySQLの設定の問題又はサーバースペックの問題ってことですね。
スレ違い申し訳ない。

たしかに、そんなにスペックのいいサーバーではないのですが、
普通に1.5秒以上掛かります・・・
0772nobodyさん04/11/17 17:08:39ID:???
>>770
$c[$shohin] = 1;
0773nobodyさん04/11/17 17:23:22ID:zF/X7yAn
質問です。
ダウンロードダイアログ画面を出して
ファイルをダウンロードさせたいのですが、
大きいファイルだと保存画面がでるまでかなり時間がかかります。
これは何とかなりますか??

<?php
//down.php?file=ダウンロードファイル でアクセス

download($file);

function download($file){

//ファイルサイズ
if (($content_length = filesize($file)) == 0) {
die("error1");
}

//ヘッダ送信
header("Content-Disposition: attachment; filename=\"".basename($file)."\"");
header("Content-Length: ".$content_length);
header("Content-Type: application/octet-stream-dummy");

//出力
if (!readfile($path_file)) {
die("error2");
}
}
?>
0774nobodyさん04/11/17 17:25:56ID:???
>>763では$bはstringとしか読めね
0775nobodyさん04/11/17 17:35:00ID:???
>>767
仮に「自前でキャッシュ」するなら
「limitかけないでクエリー発行して、mysql_data_seek()をつかう」
の場合でも、どちらもシステム(PHP側)のリソースは食うので後者でOkかと。
サーバサイドカーソルはPHPでは無理だし。

しかしMySQLでlimit掛けても、内部的に条件判別に利用された結果
(全結果ではなく対象リストみたいなもの)はキャッシュされるので、
テーブルの値に変化とかなければ、2回目以降は比較的早く出る筈なんだが
システム上の作りが変なのか、特殊なのか…
0776nobodyさん04/11/17 17:55:44ID:???
>2回目以降は比較的早く出る筈なんだが

だよね。0.05秒だったのが次やったら0.01秒切ったし。
077769504/11/17 19:36:09ID:???
>>776
最後に参考までにサーバースペック教えてください・・・。
0778nobodyさん04/11/17 19:39:20ID:???
CPU AthlonXP2400 メモリ1GB
077982204/11/17 21:14:58ID:???
ADOdbの日本語ドキュメントってありますか??

あとPEAR::DBとの比較ってどっかにありますか??
078077304/11/17 21:36:19ID:zF/X7yAn
http://ns1.php.gr.jp/pipermail/php-users/2004-April/021685.html
まさにwinで↑なんですが解決法書いてあらず・・
0781nobodyさん04/11/17 22:35:51ID:???
>>780
試しに fopen + fpassthru でなく readfile でやるとどう?
078278104/11/17 22:36:30ID:???
ごめん血迷った発言した。無視して
078378104/11/17 22:42:49ID:???
Windows 2K, Pentium3 700MHz, PHP 5.0.2 で 81MB のファイルを
>>773のスクリプトそのままで開いてみたけど特に問題は無いよ。
PHP 自体のバグだと思うから Version Up すれば解決するぽ
0784nobodyさん04/11/17 23:59:10ID:OsVB8E9H
すみません、PHP超ド素人厨なのですが質問です。
借りてるレン鯖で設定しているあるメールアドレス宛てにメールが届いたら、
そのメール受信をキッカケにプログラム(自作のPHP)を
起動させてそのメールを処理(データベースに収納したり自動返信したり等)を
させたいのですが、そういうことは可能でしょうか?

自分で思いつく限り検索してみたところ、MTAでパイプ渡しが
どうのこうの・・・と、意味がよく分かりませんでした。
それに、そういうことは共用鯖では実現が難しそうな感じでした。

やっぱり専用鯖が必要なのでしょうか?(専鯖ならどこでも可能??)

すみません、自分のレベルが低いので分かりにくい質問かもしれませんが
どなたか技術的に分かる方がいらっしゃいましたら教えてください。
0785nobodyさん04/11/18 00:14:18ID:???
>>784
forwardやprocmail等を使えば可能だけど共用鯖なら無理かも知れんね。
専鯖でも使えるかどうかはその鯖の設定次第。
078677304/11/18 00:20:26ID:???
>783
ありがとうございます。
環境変えてやってみます。
0787nobodyさん04/11/18 00:34:20ID:GCCM5gSl
>>785
お答えありがとうございます。
ということは、「forward」や「procmail」というのが
使えるかどうかを鯖会社に質問すればOKですか??

もしかしたら専鯖じゃなくてVPSっていうのでも出来るのかな・・・?
0788nobodyさん04/11/18 01:02:27ID:???
>>787
まぁ、共用・専用等の区分で明確に決まる訳でもなく、
あくまで鯖側の設定次第なので1つ1つ調べていくしかないですね。
0789nobodyさん04/11/18 01:02:50ID:???
だな
0790nobodyさん04/11/18 01:50:03ID:AjTyCRAu
秒数を時間に変換する関数って有りますか?
マニュアルを探したんですけど日付に変換するものしかなくて・・・

例えば、6000秒で01:40:00って表示するようなのが欲しいんです
0791nobodyさん04/11/18 02:01:24ID:???
mktimeの秒数部分って60以上は入れられないのかな?
0792nobodyさん04/11/18 02:19:03ID:???
>>790
$sec = 6000;
echo date('H:i:s', mktime(0, 0, $sec));

一応mktimeでいけるね
24時間以上だとこのままでは無理だけど
079379204/11/18 02:32:31ID:???
24時間以上に対応したいなら多分関数作った方が早い
参考になるか分からんけど漏れが作った奴載せとく

function sectohour($sec) {
 $hour = floor($sec / 3600);
 $sec %= 3600;
 $min = floor($sec / 60);
 $sec %= 60;

 return(sprintf('%02d:%02d:%02d', $hour, $min, $sec));
}
0794nobodyさん04/11/18 03:35:35ID:???
携帯の振り分けなんですが、
FOMA端末のUA識別は
"DoCoMo/^2\.0" という表記で良いんでしょうか?

<?
$ua = $_SERVER["HTTP_USER_AGENT"];
if(ereg("DoCoMo/^2\.0",$ua)){
header("Location: aaa.html");
exit;
}else {
header("Location: bbb.html");
exit;
}?>

FOMAで「aaa.html」 それ以外は「bbb.html」へ飛ばすようにしてるつもりなのですが、
上手く動作しません。
0795nobodyさん04/11/18 04:36:45ID:???
関係ないかもしれないけど携帯の場合だと
location hoge は絶対パスで書かないと駄目だとか
079679004/11/18 08:35:27ID:???
>>791,792,793

レスありがとうございます。なるほど、mktimeですか気付きませんでした。
しかし、24時間以上を扱う予定なので793さんのコードを参考に作ってみます。

みなさんありがとうございました。
0797nobodyさん04/11/18 09:49:06ID:jaTiTZm1
10日でシリーズでPHPやってるんだけど
Fatal error: Call to undefined function: mb_convert_encoding()
のエラーで止まって動かなくなりました
bm_convert_encoding()の動きはわかるんだけど
PHPのライブラリ?から読み込んでるんですか?
0798nobodyさん04/11/18 10:23:09ID:???
>>797
環境は?
Windowsだったらdll読み込んでないんだろうし、
Linux系だったらconfigureで-with指定してないんだろうな。
0799nobodyさん04/11/18 11:05:19ID:???
>>797
<?php
phpinfo();
?>
実行結果をよく確認。
0800nobodyさん04/11/18 11:06:28ID:???
797じゃないですが、win版でdllを読み込ませる場合って
c:\windows\system32にdllをおいてApacheを起動するだけでOKですか?
0801nobodyさん04/11/18 11:10:35ID:???
php.iniを変更する。
080279704/11/18 12:57:08ID:jaTiTZm1
windows 環境で
phpdevをインストールした状態です
0803nobodyさん04/11/18 14:57:43ID:z5HMJmKG
hoge=aaa
hoge=aaa&piyo=bbb
上の文字列の「aaa」の部分を抜き出したいのですが、うまい正規表現の仕方はないでしょうか?
preg_match_all("/hoge=(.+?)\&/",$str,$match);
だと、hoge=aaaのマッチが取れないのです…。
0804nobodyさん04/11/18 15:16:01ID:???
>>803
そりゃそうだ。正規表現を勉強汁。PHPの質問じゃない。
0805nobodyさん04/11/18 15:28:11ID:???
>>803
テンプレ

正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
0806nobodyさん04/11/18 15:35:00ID:???
>>803
$str = "hoge=aaa&piyo=bbb";
parse_str($str);
echo $hoge;
echo "<br>";
echo $piyo;
0807nobodyさん04/11/18 15:37:24ID:???
>>806
それは穴になりかねんぞ
080880504/11/18 15:46:53ID:???
orz
正規表現勉強するなら、ここのテンプレにあるぞ。
っと言ったつもりだった。
あっちで質問してら。
0809nobodyさん04/11/18 15:48:45ID:???
>>803
$_GET['hoge']の事だったりして
0810nobodyさん04/11/18 15:55:34ID:???
意図がよく分かんない質問だったね。(終わった事にしてる)
preg_match_all の方を使おうとしてるのを考慮すると、>>809の可能性も。。。
0811nobodyさん04/11/18 17:12:40ID:???
素朴な質問です
countとsizeof関数は、何か違うのでしょうか?
マニュアルには、sizeofはcountのエイリアスとしか記載されていませんでしたが
使い分ける必要等はあるのでしょうか?
0812nobodyさん04/11/18 17:40:40ID:???
同じ同じ。
0813nobodyさん04/11/18 17:46:25ID:???
>>809
いや実は俺もそうではないかと恐ろしくなって答えれなかった(w
0814nobodyさん04/11/18 17:57:38ID:???
>>811
エイリアスとは何かを調べれば答えは自ずと分かるでしょ。
ついでに「ラッパー」とかも調べておくといいかも。
0815nobodyさん04/11/18 18:03:03ID:???
count だとC言語使ってた香具師が多用してる変数countと
ごっちゃになるからだけだと思う。
sizeof導入も、C書きの人がすんなり入りやすいためだけだろう
多分。
0816nobodyさん04/11/18 18:03:29ID:???
他の関数へのエイリアスとなっている関数は将来どう変更が加わってもおかしくないので
使わない方が無難
0817軟式PHP04/11/18 18:07:36ID:???
(´・ω・`)?
0818nobodyさん04/11/18 18:18:24ID:8nQGI/2a
レガシーASPから、PHPへの移行を考えています。

そこで質問なのですが、
ASPでのresponse.endに該当する記述は、PHPだと何になるのでしょうか?

具体的にはフォームから送られた内容を確認するために、
受け取った変数の中身をechoで表示したところで、1度スクリプトを停止させたいのです。

基本的な事で申し訳ありませんが、よろしくお願いします。
0819nobodyさん04/11/18 18:22:11ID:???
exit;
0820nobodyさん04/11/18 18:58:04ID:???
die;
0821nobodyさん04/11/18 19:05:33ID:bps4zhVU
ereg_replace()にて文字列を変換してるのですが
たまに変換されずになることがあります。
変換内容はュ→ユのように小文字を大文字に直すだけなんですが
何か原因があるのでしょうか?
また、str_replace()とか使った方がいいですか?あまり違いがわからなくて・・。
0822nobodyさん04/11/18 19:08:54ID:???
>>821
mb_convert_kana()をどうぞ
082382204/11/18 19:13:29ID:???
少し補足しておくと、
そういう処理はマルチバイトを考慮しない関数は使わない方がいい。
色々ググってみ。
0824nobodyさん04/11/18 19:29:34ID:???
php.iniのextension=php_openssl.dll を有効にして起動したいのですが、
php_openssl.dllが見つかりませんというエラーになります。
extension_dirをフルパスに設定しても./(ドットスラ)にしても
見つからないらしいです。
他にも何か設定を変える必要があるんでしょうか?
0825nobodyさん04/11/18 19:39:34ID:???
1. php_openssl.dllがそもそも無い。
2. 違うphp.iniを変更している。
0826nobodyさん04/11/18 19:53:52ID:???
>>825

1. きちんとあります。それらしきところ(system32配下やカレントディレクトリなど)に
いろいろ配置してみましたがダメでした。見つからないらしいです。

2. extension=php_openssl.dll の行をコメントアウトして再起動するとエラーが消えるので
php.ini自体は正しいと思われです。
0827nobodyさん04/11/18 20:39:48ID:???
>>826
エラーの内容だけど、他にdllが足りないってエラーは出てない?

0828nobodyさん04/11/18 20:45:57ID:???
>826
http://php.s3.to/man/ref.openssl.html
>Win32ユーザへの注意: このモジュールをWindows環境で使用するには、PHP/Win32バイナリパッケー ジのDLLフォルダからlibeay32.dllを使用する WindowsマシンのSYSTEM32フォルダ(例: C:\WINNT\SYSTEM32または C:\WINDOWS\SYSTEM32)にコピーする必要があります。

これではないのか?
0829nobodyさん04/11/18 20:49:13ID:???
>>826
libeay32.dllをsystem32フォルダにコピー
環境変数OPENSSL_CONFを新規作成してopenssl.cnfのパスを指定
0830nobodyさん04/11/18 20:51:20ID:???
openssl.cnfはwindowsでは拡張子無しの短縮ダイヤルと表示されるので注意
編集する場合はエディタから開くで指定する。
0831nobodyさん04/11/18 22:14:30ID:VOS+8K87
PHPでは、$obj->getchild()->getname();
のように、オブジェクトを返すメソッドから直接そのメソッドを呼ぶことは、
許されてないのでしょうか?
パースエラーになります。

PHP4です。
0832nobodyさん04/11/18 22:27:31ID:XCBl1M85
単純な質問ですけど
PHPで一番得意なのはどういう処理ですか?
(DB操作や文字列処理、数値計算など)
0833nobodyさん04/11/18 22:40:23ID:???
>>832
なんじゃこの質問
0834nobodyさん04/11/18 22:40:25ID:???
>>832
マニュアルより。
PHPを使用する上で最も優れている点は、初心者に対しては非常に分かり 易いと同時に、
プロフェッショナルのプログラマに対しては多くの進んだ機能を提供している点です。
PHPの機能を羅列した長い一覧表を読まなければならないのかと心配する必要はありません。
PHPはすぐに始められますし、数時間の内に簡単なスクリプトが書けるようになります。
0835nobodyさん04/11/18 22:45:43ID:???
>>832
まー勉強するなら普通にJava行っとけって。
0836nobodyさん04/11/18 22:55:21ID:???
お遊びプログラマがJava覚えたって意味ねー
0837nobodyさん04/11/18 23:00:25ID:???
>>836
未経験者ですか?
0838nobodyさん04/11/18 23:01:18ID:???
>>833
他言語との速度比較をする際に参考にしようと思って質問しただけです

>>834
なるほど。
ということは処理的な特徴は特にないのですか?
(私はPHPを使った開発はしてません)

>>835
なぜ?

>>836
Java書けますけど
私もそう思います
0839nobodyさん04/11/18 23:05:03ID:???
>>837

趣味でやってる程度のヤシが借りるレン鯖でjavaなんか使えねえよ世間知らず。
0840nobodyさん04/11/18 23:07:11ID:???
>他言語との速度比較をする際に参考にしようと思って質問しただけです
それなら最初から速度に関して質問すればいいでしょ
全体的な処理の速さなら他の言語と違いあるだろうし、規模にもよるんだって回答もあるでしょう。
文字列処理だけ特別に早かったり、数値計算がなぜかすごく遅かったりなんていう言語はあるとは思えん。
084183104/11/18 23:13:11ID:???
で、831はダメ?
それだと、自分の中で、「PHPつかえねー」って結論になってしまいます。
それだとさみしいな。
084283204/11/18 23:16:13ID:???
>>840
全体的な速度とかは求めてません。
あくまでもPHPとして得意な処理ってなんなの?っていう件でお答えしていただきたかったのです

ちなみに特別に早いとか遅いはないですけど
得意・不得意は絶対にありますよ

特に数値計算は苦手な言語が多いので差が出やすいと思います
0843nobodyさん04/11/18 23:17:07ID:???
早く言えば、phpはWeb利用を前提にしてるから
そういう方面に使いやすい
0844nobodyさん04/11/18 23:21:08ID:???
得意不得意の前に、使う人間の頭による。
084583204/11/18 23:22:15ID:???
>>843
マニュアルでも確認できましたし
やはりそういう得意分野は処理ではなく開発(特に初心者向け)のほうで1歩前に出てるということですね
ありがとうございました。
0846nobodyさん04/11/18 23:22:25ID:???
>>826
環境書け。
話はそれからだ。
084783204/11/18 23:23:28ID:???
>>844
それはプログラミング全体の言語以前の問題で
私もそれは常に思っています
0848nobodyさん04/11/18 23:27:05ID:???
>>845
そう、初心者向けに開発しやすい
お約束が少ない


まぁ玄人(?)でも簡単に書けてすぐ動く。
速さを求めるなら、他のをどうぞ
084983204/11/18 23:32:53ID:???
>>848
なるほど。
わかりやすい回答ありがとうございます
0850nobodyさん04/11/18 23:42:50ID:???
Web関係の物は標準で組み込まれてるから
鯖に易しい
■ このスレッドは過去ログ倉庫に格納されています