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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/10/05 17:36:38ID:???
・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
01669804/10/08 09:28:37ID:???
棲み分けに関して
何回かこの板で質問させてもらった98ですが、
スクリプト改造スレみたいに【希望するレスの形】別なんてどうでしょう?
自分がつまずきレベルを考えたら3種類あって
【1、マニュアルの該当しそうな所が予想つく→マニュアル読む】
【2、マニュアルのどこに該当するのか見当つかない→キーワードでぐぐる】
【3、なにでぐぐっていいのかすらわからない】
くらいに大別できるかなと思うので3番目は論外にせよ
ヒントをくれるスレ、マニュアルのどこそこに該当するからそこ嫁、なんて
2番目の状態でぐぐっても何もなかった時に質問できるスレがあったらいいなぁ
なんて思います
長文スマソ
0167nobodyさん04/10/08 09:31:09ID:wO90jo1V
$log = fopen(log.dat,"r+");
set_file_buffer($log, 0);
flock($log, LOCK_EX);
$kiroku = file(log.dat);
処理
rewind($log);
ftruncate($log, 0);
fputs($log, 処理の結果);
flock($log, LOCK_UN);
fclose($log);

排他ロックはこれでOK?
0168nobodyさん04/10/08 09:45:19ID:???
>>167
flock() に失敗したときの処理はどうなってるの?
016916704/10/08 10:09:33ID:???
>>168
サーバーをリブートさせてます。
017016704/10/08 10:27:11ID:???
if (!flock($log, LOCK_EX)){ echo"ロックに失敗しました"; }
0171nobodyさん04/10/08 13:21:18ID:???
凄く遅レスだけど、動的ページでhtmlにコメント入れてあるのは
自動巡回&切り出しソフトとかで切り出すのに重宝するよね。

>>167,170
if (!flock($log, LOCK_EX)){ echo"ロックに失敗しました"; }
else {処理;}
とかいう突っ込みをしてみる。
0172nobodyさん04/10/08 13:45:17ID:???
safe modeがオンのときに画像アップロード等の
phpアプリを実行することはできますか?
0173nobodyさん04/10/08 13:52:52ID:???
試してどうだったんだ。
0174nobodyさん04/10/08 13:55:25ID:???
>>172
環境とコードによるけど、セーフモードつったって只のIDチェックでしょ?
http://jp.php.net/manual/ja/features.safe-mode.php#ini.sect.safe-mode
0175nobodyさん04/10/08 17:43:50ID:???
馬鹿がいる。
017615904/10/08 18:11:51ID:???
>>162
'/''のエスケープは有効だったね。
>>152 は、(マニュアル通り) *特殊文字の*エスケープシーケンスに訂正します。

>>165 フォローthx u
0177nobodyさん04/10/08 19:08:16ID:EsMqKh23
日付を使って条件判断したいのですが
以下のようにやってもうまくいきません。
例えば10月の分は全部syori2に行き11月の分はsyori1になります。
どっか間違っていますでしょうか?

if(date("Y/m/j")<date("Y/m/j",mktime(0,0,0,$month,$day,$year))){
syori1
}else{
syori2
}
0178nobodyさん04/10/08 19:13:40ID:???
>>177
これならへたれな俺でも回答できる
UNIXタイムスタンプで比較すれ
0179nobodyさん04/10/08 21:13:17ID:???
>>177
http://jp2.php.net/manual/ja/function.strtotime.php
0180nobodyさん04/10/08 21:17:26ID:???
えっ?それは・・・
0181nobodyさん04/10/08 21:21:51ID:???
>>163
mb関数はバグがあるからちゃんと返却値を確認しつつ使う必要があるよ。
例えば、mb_convert_kana()などは、全角スペース→半角スペースの変換ができないから
preg_replace()なんかで受ける必要があったりとか。

>>177
なぜ数値として比較したいのに「/」を入れて文字列にしてるのかと小一時間(w
018217904/10/08 21:24:55ID:???
ごめん、質問をよく読まないで書いた。
よく読んだら
【10月の分は全部syori2に行き11月の分はsyori1になります。】
これが望んでいる動作なのか望まないのに
そのように動作しているのかすらわからなかったorz
0183nobodyさん04/10/08 22:42:04ID:???
プログラミングではなくスクリプトそのものをフリーで探しているのですが、
その場合の質問もこちらでいいのでしょうか?

ギャラリー系のPHPスクリプトでPHP4.0.6/DB無し/ImageMagik・NetPBT(?)無しのサーバーで
ブラウザからUpload出来、自動リサイズ可能で各画像/アルバムのDiscriptionの編集が効くようなスクリプトはご存じないでしょうか?
注文が多くてスミマセン。
018418304/10/08 22:42:32ID:Us1p5CHj
連続カキコすみません。
ageるのを忘れていました。
0185nobodyさん04/10/08 22:48:39ID:???
>>182
危うく同じ過ちを犯すとこだったよ <-- if ($month == 10) と書こうとしてた

>>177
とりあえず、"Y/m/j"の場合は、桁数が可変なのでこれを固定長にする。
その前に日付フォーマット文字の(j)は"分"なんだけど、比較したいのは"日"(d) なんじゃないかな?
018618504/10/08 22:55:59ID:???
>>185 自己レス
> 日付フォーマット文字の(j)は"分"
ごめん、勘違いしてた.

> j ... 日。先頭にゼロをつけない。1 から 31
> d ... 日。二桁の数字(先頭にゼロがつく場合も)01 から 31
0187nobodyさん04/10/08 23:02:06ID:???
>>183-184
あースレ違いだから
0188nobodyさん04/10/09 00:02:04ID:???
>>183
Web製作板のほうにCGI探しスレがあるんでそっちで。こっちは自分で作る板。
向こうアホが張り付いて荒らしてるんで心して行った方がいいよ。
0189カポコン04/10/09 00:36:55ID:???
よぉ、ネタが途切れてるみたいなんで振っとくよ。
PHPではポインタの中身は見れないんだよな〜。
見たいなー見たいなー、見れる方法あればきぼんなんだな〜。
<?php
$a = 0xff;
$b =& $a;
echo(printf("%p",$b));
?>
とかじゃー、出ないし・・・orz。
0190nobodyさん04/10/09 00:44:57ID:???
まだ参照をポインタだと勘違いしてるのか。
期待してるんだからもっと勉強しろよ。
0191nobodyさん04/10/09 00:47:07ID:???
ポインタアドレスをPHPで使う必要が皆無なので出来ません
0192nobodyさん04/10/09 00:50:51ID:???
もうちっと勉強できたらバカボンを名乗るのを認めてやろうぜ
0193nobodyさん04/10/09 01:42:07ID:???
PEARで使えるものって何かあります?
0194nobodyさん04/10/09 01:47:43ID:???
>>193
意味不明
0195nobodyさん04/10/09 01:55:11ID:???
素人は引っ込んでろ
0196nobodyさん04/10/09 02:01:22ID:???
>>193
引っ込んでろってさ。
0197nobodyさん04/10/09 02:02:07ID:???
>>189
引っ込んでろってさ。
0198nobodyさん04/10/09 02:24:49ID:???
自分で作りたくなくて、便利でオススメなモノだ
0199nobodyさん04/10/09 03:50:28ID:???
板違い
020019904/10/09 03:52:38ID:???
誤爆った
0201nobodyさん04/10/09 05:23:42ID:???
php4のクラスって5でもほとんどそのまま使えるんだね。
4のスタイルで書いた方が面倒くさくなくていいかも。
0202nobodyさん04/10/09 05:33:48ID:???
デリファレンスしたり@accessに気をつかったりスタティックなプロパティはメソッド
にもたせないといけなかったりオブジェクトは必ず変数にしまう必要があったり等々で
4のオブジェクトはめんどい。んでE_STRICTでとんでもないことに。
もちろん自分で使う分にはいいんだけど。
0203nobodyさん04/10/09 06:26:47ID:Iitzl1Oa
redhat9
apache2.0.52

php5.0.2をインストールしてapacheを再起動すると下記のようなエラーがでますが、
何のバージョンをあげればいいのでしょうか?
mod_php.cで20020628のファイルなんて見あたらないのですが・・・

-----------------------
# /usr/sbin/httpd -k restart
>httpd: module "/home2/Download/php-5.0.2/sapi/apache2handler/mod_php5.c" is not compatible with this version of Apache (found 200
>20628, need 20020903).
>Please contact the vendor for the correct version.
0204nobodyさん04/10/09 12:32:31ID:KzxQhnSE
質問です。

function hoge($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k) {
処理;
}

みたいな引数が多い自作関数てやめたほうがいいですか?
なんかごちゃごちゃして分かりにくいきがするのですが。
皆さんは自作関数の引数はどれくらい持たせるのでしょうか?
0205nobodyさん04/10/09 12:37:31ID:???
>>204
配列渡せば?
0206nobodyさん04/10/09 12:38:46ID:JKfj4SS6
処理によりけり。
てか、何故にそんなに引数いるねん。
多分どっか無駄があると思うで。
020720404/10/09 12:44:30ID:???
>>205
>>206

204の例はちょっと極端でした・・・
今までは引数が2,3こくらいしか扱ったことが無くて、
今回いきなり引数が6つくらいあるのです。
だからあまり多い引数の関数に慣れていないというか。
引数6つって普通でしょうか?
0208nobodyさん04/10/09 12:48:54ID:???
>>207
>>204がいいこと言った。
0209nobodyさん04/10/09 12:49:41ID:???
hogeってなんなんだろうか?
なんだかすごい響きが間抜けな気がするんだが。ホゲ!
0210nobodyさん04/10/09 13:19:41ID:???
Huge Over Gigantic Expletive
0211nobodyさん04/10/09 14:22:32ID:???
>>207
6つ全部が本当に必要なパラメータなら引数にとるしかない。
しかし引数が多い場合は大抵、関数の設計に問題がある。

関数の行数が長すぎたり、ひとつの関数のなかで複数の目的を
果たそうとしていたり、引数のフラグ値によって処理を切り替え
たりしていたら、危険信号。

少し古い本だが、「CODE COMPLETE」には引数はおおむね7個
以下に抑えるべきだと書いてある。
0212nobodyさん04/10/09 14:30:53ID:???
>>204
連想配列やデフォ値の設定をうまく使ったほうがいいんじゃないかい?
function rect($options)
{
.....
}
$options = array(
'color'=>'blue',
'width'=>60,
'height'=>100,
);
rect($options);
0213nobodyさん04/10/09 14:39:11ID:80FyrwRs
php で webアプリを作る時、ディレクトリ構成どうしてますか?
いつも最初悩むんです。

設定ファイルをどこに置くとか、設定ファイルやライブラリへのパスは相対パスにするか
絶対パスにするかとか include_path にいれちゃうとか。
smartyのテンプレートをどこに置くとか、compile_dir をどこにするとか。

レンタルサーバーで 全部public_htmlの中にいれなくてはいけなかったりとか
いろいろ環境によって違うので悩みます。

漏れはこうしてるぜ!ってのあったら教えてください。
021420304/10/09 14:57:11ID:Iitzl1Oa
誰かわかりませんか?
0215nobodyさん04/10/09 15:04:30ID:WliLpyVq
ttp://aavideo.s11.xrea.com/cgi-bin/aadb/select_form.cgi
こんな感じのPHPないでしょうか
0216nobodyさん04/10/09 15:17:04ID:???
>>215
>>188

>>213
PHPでなくてもいいからフレームワーク弄ってみたら。
ドキュメントルート下に全てを置くような制約があるなら、
もう全て諦めて適当においても良いくらいの状況。
0217nobodyさん04/10/09 15:31:59ID:???
P H P
0218nobodyさん04/10/09 17:16:40ID:???
hogeって「なになに」とか「ほにゃらら」という意味だと思ってた…
0219nobodyさん04/10/09 17:22:33ID:???
hoge&fuga文化も知らない輩でも使ってるPHPって・・・・。
0220nobodyさん04/10/09 17:25:51ID:???
PHPの「参照」って、ポインタと思って間違いない?
レクチャーしてほしいんだが・・・
0221nobodyさん04/10/09 17:29:59ID:???
>>220
はぁ・・・
0222nobodyさん04/10/09 17:48:10ID:???
>>220
だめだこりゃ
0223nobodyさん04/10/09 18:17:17ID:???
こういう時こそマニュアルですよ。
http://www.php.net/manual/ja/language.references.php
> これはCポインタのようなものではなく ...
0224nobodyさん04/10/09 18:26:42ID:???
>>203
INSTALLに書いてある通りにインストールしろ
022521304/10/09 18:36:46ID:???
>>216
mojavi でも眺めてみます!
0226nobodyさん04/10/09 19:49:02ID:???
>>223
要するに、Cのポインタは ポインタ側にその構造(intなのかcharなのか等)を保持しているけど
PHPの参照(リファレンス)はその情報すらもヒープかそれに相当する部分にあり
参照に使う変数はもとの変数やオブジェクトのエイリアスとしてしか機能しない
ということね
0227nobodyさん04/10/09 20:17:56ID:???
ファイルにポツポツと出力するとき
いちいちfopenして書いたりするのと
system("echo $hoge >> file"); とか書いちゃうのと
どっちがダサい?
0228nobodyさん04/10/09 21:47:59ID:???
>>226
> Cのポインタは ポインタ側にその構造(intなのかcharなのか等)を保持している

してねーよ。Cのポインタはただのアドレス値。
型はコンパイラが知ってるだけ。


> 参照に使う変数はもとの変数やオブジェクトのエイリアス

シンボルテーブルのエイリアスって書いてあるから
変数の別名を作れるだけでヒープ上のオブジェクトの参照は作れないだろ。
0229nobodyさん04/10/09 22:09:46ID:???
>>228
>型はコンパイラが知ってるだけ
わかってるよ。便宜上そう書いただけ。
インクリメント等の挙動はポインタ側で決定されるでしょ。
0230nobodyさん04/10/09 22:32:30ID:???
http://rtkrtykrtyk.gozaru.jp/mvg6ocqcvfk.html
http://drtykjsrt.ifdef.jp/ncndkdjany.html
0231nobodyさん04/10/09 22:33:31ID:???
荒れる前に言っとくと、
PHPスレだから、Cのコンパイラの実装方法なんてどうでもいいよ。
ポインタ型がインクリメントを適切に扱えればCを使う人にはそれ以上気にする必要が無い。
同様にPHPを使う人は、PHPにポインタが無いことと
ポインタ型の概念を持ち込むことは無意味だということを知っていさえすれば良い。
0232nobodyさん04/10/09 22:36:10ID:???
>>231
オレも実装の方法はどうでもいいと思ってるよ
0233nobodyさん04/10/09 23:26:42ID:???
>219
hoge&fuga文化って何ですか?
検索してもサンプルの山に埋もれて出典が発見できませんでした
0234nobodyさん04/10/09 23:30:28ID:???
>>233
このページが参考になるかも知れません。
ほげを考えるページ
http://kmaebashi.com/programmer/hoge.html
0235nobodyさん04/10/09 23:32:43ID:???
つーかこんなくだんない知識でアンデンティティ保とうとすんなよ
0236nobodyさん04/10/09 23:33:11ID:???
>234
ありがとうございました。
まさかとは思っていましたが「ほげ〜」のほげだったとは…
0237nobodyさん04/10/10 01:31:38ID:???
hoge、fuga、foo、bar
0238nobodyさん04/10/10 02:34:08ID:???
foo fightersだよ
0239にゃんこ04/10/10 02:34:10ID:DhJ+i6pZ
こんにちは。
ちょっと探しもの中です。

テキストカウンターで昨日・今日・合計が表示されるやつで
ちょっとやそっとじゃ、飛ばないカウンターを探しています。
バックアップ機能がついてると、さらに嬉しいのですが・・・
残念ながら、
ttp://php.s3.to/
さんの昨日今日カウンターは、すぐに飛びました。。。。 (ToT)


アクセス多くても、あんまり飛ばないよ!っていうのを知ってる方、
ぜひ教えてください。宜しくお願い致します。
0240nobodyさん04/10/10 02:37:39ID:???
>>239
>>188
0241nobodyさん04/10/10 02:59:03ID:???
>>239
過去にもあったなそれ。
数スレ前に飛ばないようにする改造点が上がっている。
0242nobodyさん04/10/10 03:01:29ID:???
数スレどころじゃなかった
【PHP】質問スレッド Part14
http://pc2.2ch.net/test/read.cgi/php/1076163015/401-
0243nobodyさん04/10/10 08:00:23ID:6dJYwntE
以前作ったファイルの条件分岐(while)の部分を修正したいんですが、
無限数を表現する記号かなんかってありますか?


$hoge=200;

if($a==$b){
 $hoge=∞; ←ココ(無限大マーク)
}

while($hoge > 100){
//処理
}

みたいな感じで書きたいんです。
それがあれば簡単に修正できるんですが…。

ちなみに単純に、

while($hoge > 100 || $a==$b)

って書き方したら「あるいは$a==$b」の部分は無視されて、
最初の「$hoge > 100 」の部分がfalseになった時点でループが終了してしまいました。
while文ってそーゆーもんなんですね…。
0244nobodyさん04/10/10 08:00:46ID:iO0fDOFW
あるオブジェクト(A)の返り値としてオブジェクト(B)を作ったとします。
この(B)って、自分で破棄しなくていいんでしょうか?
メモリーリークの原因になったりはしませんよね?
024524304/10/10 08:05:55ID:6dJYwntE
あ、全然別のところをいじることで今解決しました。
すいません。
0246nobodyさん04/10/10 11:35:18ID:???
>>243
ワケワカラン
0247nobodyさん04/10/10 11:42:19ID:???
>>244
PHPではオブジェクトの破棄は必要なし。
放っておけば良いです。
0248nobodyさん04/10/10 19:04:14ID:TR7Uhe7O
Apache/1.3.28 (Unix) PHP/4.3.5
PHP Accelerator v1.3.3r2
MEMORY:160MB

上記の環境で使用しているのですが、apacheのログに時々次のようなメッセージが記録されます。

[warn-phpa] No mempool 2 memory (pid xxxx)
[notice-phpa] shm cache temporarily disabled (pid xxxx)

'phpa_cache_admin -mv'を実行すると'cache disabled'と表示されるため、
毎回手動でキャッシュを有効にしているのですが、他に解決方法はあるでしょうか。
0249nobodyさん04/10/10 20:15:52ID:???
>>243
while文は関係ない
||演算子は OR 論理演算子

 A || B

という式があった場合
Aが真である限り、Bは評価(実行)されない
0250nobodyさん04/10/10 21:29:41ID:???
>>249
ん?評価されないのか!
これはまた一つ勉強になった!ありがとう。

ってことは
真 || func()
とかやってもfunc()は実行もされないと解釈していいのかな?
0251nobodyさん04/10/10 21:32:26ID:???
試そうともしてないし、一つも勉強になってないですね。
0252nobodyさん04/10/10 21:39:25ID:???
Cから勉強しなおせ。短絡論理演算子とビット論理演算子の違いも分からんのは辛いな
025324904/10/10 21:47:04ID:???
>>250
A || B は AまたはB が真である場合に真となる
左辺値から順に評価を行い、結果が真であった時点で
論理演算の結果を真として、その右辺値以降の評価は行わない

(問1)
$a = 0;
if ($a == 0 || ++$a == 1) ++$a;
echo $a;

(問2)
$a = 0;
while ($a < 4 || $a % 2 == 0) ++$a;
echo $a;

練習問題でもやって覚えんさい
適当な問題ですまんけど
0254nobodyさん04/10/10 22:06:21ID:???
てか>>250は or die() を使ったことがないんだろうか…
025525004/10/10 22:19:55ID:???
あぁ、or die()も A or BでAが偽の時点でBが評価されるという意味か、、、
ってかそんなことも考えずに使ってました orz

>>253,254
分かりやすい解説&ヒントありがたいです。
025624804/10/10 23:15:25ID:???
見事にスルーですね
デナオシテキマス
0257nobodyさん04/10/10 23:57:46ID:???
>>248
てか、それだけだとPHPの問題かどうかすらも分からんです。
OSのヴァージョンから洗いなおしたほうが良いのではないっすかね?
メッセージからしてアロケートエラーの類ではないかと思えますし。
0258nobodyさん04/10/11 00:01:29ID:???
PEARのhtmlテンプレートでどれが一番いいですか?
0259nobodyさん04/10/11 02:43:49ID:???
>>258
Smarty使えば?
http://smarty.php.net/

日本語マニュアルあるから、安心しる!
0260nobodyさん04/10/11 04:42:24ID:???
なんなんだコイツら
0261 04/10/11 04:42:47ID:CqR/mj9n
OSがWINDOWS XP HOMEで自宅サーバ上でアパッチを使って画像投稿CGIを実行したのですが、画像が表示されません。
ローカルフォルダのイメージフォルダに画像は保存されている
のですが、 x印になります。
どの画像掲示板スクリプトを使っても、そういう症状になります。
ちなみに、PNG画像カウンタなどは正常に数字画像が表示されます。

CGIスクリプトのイメージの設定は以下のようにしました。
$ImgUrl = "http://localhost/cgi-bin/clip/img/";

それと、直接画像にアクセスしようと以下のURLを入力したの
ですが、Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
と出ます。

http://localhost/cgi-bin/clip/img/4.png

使用ソフトは、Apache/2.0.52  PHP/4.3.9 ActivePerl-5.8.4.810
です。
httpd.confかphp.iniが問題だと思うのですが、アパッチかPerlの設定のどこを直せばよろしいでしょうか?
教えてください。
0262nobodyさん04/10/11 04:56:42ID:???
>>261
その画像404だったぞ?URLあってる?
0263 04/10/11 05:16:21ID:CqR/mj9n
>>262
自宅のパソコンのローカルホストのURLです。
インターネット用のURLではありませんで、何の汎用性もありません。
0264nobodyさん04/10/11 05:38:49ID:???
/cgi-bin/ディレクトリ配下の画像やHTMLが表示できない
http://acorn.zive.net/~oyaji/faq/apache_cgi5.htm
0265nobodyさん04/10/11 05:40:20ID:???
天然だな・・・


>>261
症状からして板違い
原因が何か分かってりゃ該当する板(スレ)へたどり着けると思うが、
それすら出来ないならもっと基本的なところから始めたほうがいい
↓
http://www.google.co.jp/
■ このスレッドは過去ログ倉庫に格納されています