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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/11/22 17:25:42ID:???
・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
0446nobodyさん04/12/03 07:58:48ID:???
>>445
なるほど
でもそんなソース見たことないですね>>435みて自分も違和感感じました。
0447nobodyさん04/12/03 08:05:21ID:???
質問です。
自宅サーバーでphp使ってますがファイル生成ができません。
touch関数も使えません。
ディレクトリのパーミッションは755です。
php.iniの設定のどこか間違ってるのでしょうか?
0448nobodyさん04/12/03 08:07:56ID:???
PHPでは確かにあんまり見ないよね。
ttp://www.catnet.ne.jp/kouno/c_faq/c17.html#4
044944704/12/03 08:35:54ID:???
いろいろ調べてますが、safe_modeもOffです
0450nobodyさん04/12/03 08:51:42ID:???
>449
環境書け、環境
Winでアクセス権とか言うなよ
045144704/12/03 09:45:39ID:???
OS linux
Apache2
php4.3.9です。
よろしくおねがします
0452nobodyさん04/12/03 10:19:48ID:???
>>435 は >>417 へのレスみたいだけど、
ファイルの数だけ分岐を書くつもりなのか。
ifの条件式よりむしろそっちに違和感が...
045344704/12/03 10:34:40ID:???
ディレクトリとファイルのアクセス権をapacheに変更したら一応できました。
これってphpもapacheのsuexecを使わなきゃいけないってこと?
0454nobodyさん04/12/03 10:37:27ID:???
ApacheモジュールなPHPはsuexecなんて使えません。
0455nobodyさん04/12/03 10:37:42ID:???
>>452
質問者のレベルもあれだが、>>435のレベルもかなりあれだな。
0456nobodyさん04/12/03 10:43:26ID:???
>>455
ふつうは

echo "<img src='{$_GET['file']}.jpg'>";

みたいにするよね
0457nobodyさん04/12/03 10:53:45ID:???
>>456
おまいはよく読め。
「説明文」も変更したいそうだ。

例として出してるなら、おまいの言うとおり。
0458nobodyさん04/12/03 11:07:12ID:???
説明文もああいう条件文にはせんけどな
0459nobodyさん04/12/03 11:20:57ID:ty66hqky
mysql_pconnectとmysql_connectについて教えてください
connectは一回ずつ終了しては接続して、
pconnectは既にセッションがあるならそれを使用するということなんですが
データベースへの負荷というのはどっちでも同じなのでしょうか?
0460nobodyさん04/12/03 11:28:07ID:???
>> 417
./img に画像ファイル, ./txt に説明文を書いたテキストを置く。
hoge.phpには普通のHTMLを記述する。画像と説明文の2箇所だけPHPのコードを下記の通りに挿入。

<html>
... 省略 ...
<img src="<?= "./img/$_GET[file].jpg" ?>" /> <-- 画像 -->
<? include "./txt/$_GET[file].txt" ?> /> <!-- 説明文 -->
... 省略 ...
</html>

URLの呼出は hoge.php?file=1 で、$_GET[file] に 1 が設定される。
実際に運用するには値のチェックとかもしないといけないけど、
手短に説明するとこんな感じ。
0461nobodyさん04/12/03 11:36:03ID:???
>>440
これか
Webサイト制作初心者用質問スレ Part 110
http://pc5.2ch.net/test/read.cgi/hp/1101583920/342
0462nobodyさん04/12/03 11:41:45ID:???
>>460
画像1枚につきファイル1つ用意するんですか?
ご苦労様でつ
0463nobodyさん04/12/03 11:52:07ID:???
>>462
何が苦労なんだ?
0464nobodyさん04/12/03 11:56:01ID:???
>>461
ぶっちゃけ、この時点で答え出てたんだね…
レスもしてないし、やっぱ本買え。>417
0465nobodyさん04/12/03 11:58:00ID:???
>>463
画像が1000枚あったら別に1000ファイル用意するのかって事だろ
俺だとマンドクセだ
0466nobodyさん04/12/03 12:12:06ID:???
>>465
頭悪いな
0467nobodyさん04/12/03 12:13:40ID:???
>>459
MySQLはコネクションネゴシエーションによる負荷は
非常に低いので、他のDBMSほど気にすることはないが
mysql_pconnectとmysql_connectを比べた場合、
前者の方が負荷が低い場合がある。断定でないのは
使いまわしされなければ同等だから。
046845904/12/03 13:01:12ID:ty66hqky
>>467
わかりやすい説明ありがとうございました。
0469nobodyさん04/12/03 13:46:41ID:???
>465
ファイルかどうかは別にしても、
1000枚の画像それぞれに解説があるんだから、
1000件のデータは作らなきゃならんだろ。

ま、いずれにしてもDB使えって事だな。
0470nobodyさん04/12/03 14:01:43ID:???
mysql_pconnectってマルチスレッドは大丈夫なのかな?
LAST_INSERT_ID()とか問題になったりしないのかな??
0471nobodyさん04/12/03 14:29:03ID:???
また独り言か
0472nobodyさん04/12/03 14:43:53ID:???
>>470
PHP自体はマルチスレッドを言語的にサポートしてないから問題ない(関係ない)。

同じDBユーザでpconnectされた場合、先の接続が終了していなければ
使いまわしではなく全く別の新規の接続として扱われるので
LAST_INSERT_IDには影響しない。影響するとすればpconnectによる
接続同一性を前提として、クエリを発行せずにLAST_INSERT_IDを取得した場合。
しかしこれは、pconnectではそもそも同一性は保証されないのだから、プログラムの作りがマズイ。
047347004/12/03 14:47:29ID:???
>>472
おおお。ありがとうございます。
よく理解できました。

# Sybaseでpconnectに問題があってから、
# なんとなくpconnect敬遠してたけど、MySQLなら大丈夫かなぁ。
0474nobodyさん04/12/03 16:31:43ID:???
gzopen()でつくったファイルポインタってflockつかえないけど、おまいら排他制御はどうしてますか?
0475nobodyさん04/12/03 16:51:24ID:ods0UPS5
引数を可変数にしなければいけない時など、
呼び出し側指定のリファレンス渡しをしなければいけないケースは
出てくると思うのですが
みなさんallow_call_time_pass_referenceをOnにしていますか?
0476nobodyさん04/12/03 18:48:43ID:???
最近XOOPSとか、部品(モジュールを)を後から追加するような
ソリューションが多くなってきましたけど、
あれってどういう設計なんでしょうか?
インターフェース設計とか・・・

参考になる本やWebページなんかあれば教えてください。

ってかソース読むのが手っ取り早いのかなぁ?
0477nobodyさん04/12/03 20:00:01ID:???
>>429
include(dirname(__FILE__)."hogehoge.php");
これで間違いないと思われ
0478nobodyさん04/12/03 20:24:16ID:???
>>477
こうじゃない?
include(dirname(__FILE__)."/hogehoge.php");
0479nobodyさん04/12/03 20:33:31ID:???
>>476
最初にメインの共通クラスライブラリを読んで、
インストールモジュールのリストや設定ファイル
(実際にはリストや設定はDBに入ってる事が多い)
を読んで、それらの処理に従ってコンテンツを生成する。
0480nobodyさん04/12/03 22:12:01ID:???
>>477-478
ありがとうございました
0481nobodyさん04/12/04 01:20:34ID:p/Q3rspF
ちょっと調べてもよくわからないことがあるので、質問させてください。
関数の処理を行った後の位置を、指定することはできますか?

具代的にはこんなスクリプトで、foo関数を実行した後、「echo "b";」に行かないで、
処理の続きをしたいのですが、どうすればいいのでしょうか?

foo();
echo "b";
function foo(){
echo "a";
}
(処理の続き...)

よろしくお願いします。
0482nobodyさん04/12/04 01:24:56ID:???
echo "b"を書かなければいいだけでは。。。

foo();
//echo "b";
function foo(){
echo "a";
}
0483nobodyさん04/12/04 01:51:08ID:???
foo();
echo "b";
function foo(){
echo "a";
(処理の続き...)
}

こうすれば?
0484nobodyさん04/12/04 01:52:42ID:???
>>481
正直言って何がやりたいのか、何に困ってるのかが分からん
0485nobodyさん04/12/04 01:53:21ID:???
あぁ、echo "b";の処理もやりたいのか。。。
048648104/12/04 02:08:08ID:???
すみません、例がわかりにくかったです。
フォームから受け取ったデータを保存するつもりなのですが、
<?php
if(!$_POST['text']){error();}
(データの整理、書き込み処理)
success();

function success(){
$output= "Success";
}
function error(){
$output= "Error";
} ?>
(HTML部分)
<p><? $output; ?></p>
(HTML部分)

大体こんな感じで作っています。
これだと、error関数を実行した後、$outputにSuccessが代入されてしまうし、
exit;を入れるとHTML部分が表示されません。
何か解決策あったら教えてください。

よろしくお願いします。
0487nobodyさん04/12/04 02:11:20ID:???
if(!$_POST['text']){
error();
}
else{
(データの整理、書き込み処理)
success();
}

以下省略

とでもしておけば?
0488nobodyさん04/12/04 02:12:55ID:???
あ、ごめん。。。それじゃあ
<p><? $output; ?></p>
がからっぽだ。。。

0489487=48804/12/04 02:15:09ID:???
訂正しま

<?php
if(!$_POST['text']){
$output = error();
}
else{
(データの整理、書き込み処理)
$output=success();
}

function success(){
return "Success";
}
function error(){
return "Error";
} ?>
(HTML部分)
<p><? $output; ?></p>
(HTML部分)
049048704/12/04 02:31:22ID:???
あぁ、しかもまだ間違ってる。。。
×<p><? $output; ?></p>
○<p><? echo $output; ?></p>
しかし、そんなコードなら
$optoutに直接入れれば済む話なので
本来の要件とは全然違う気がしてきたorz
0491nobodyさん04/12/04 02:31:56ID:???
>>486
例外処理なら、古い手だけど do { ... } while (0); とか。(エラーの時にbreakでループを抜ける)
処理全体を関数内に書いてエラーの時はreturnで後ろの処理をcut。
PHP5なら素直に try/catch 構文を使う。
0492nobodyさん04/12/04 07:50:28ID:???
処理全体を選択構造で括ろうとするから気味の悪い発想ばかりになる。
関数に分割して処理を呼ぶのを前提に缶がえ他方がいいよ。
0493nobodyさん04/12/04 08:28:49ID:???
>>492
例えば?
0494とらたぬじゃー04/12/04 09:46:35ID:5HVD0ZHR
phpでボーダフォンのページを作っていますが、ボーダフォンの絵文字
を表示するにはどうすれば良いのでしょう??
0495nobodyさん04/12/04 10:01:40ID:???
>>492
誰に対してのレス?
0496nobodyさん04/12/04 10:21:19ID:???
さらに続くアホたち
↓
0497nobodyさん04/12/04 10:23:53ID:KceHPVj2
きぼーーんぬ
0498nobodyさん04/12/04 10:32:04ID:???
>>492
処理丸ごと巨大な関数の中に書くぞw
0499nobodyさん04/12/04 10:33:23ID:IQsH1Sj9
ifで複数条件設定したいんですが、

if($a==1||$b==1){
hogehoge;
}
上みたいに || 使えばいいんでしょうか?
0500nobodyさん04/12/04 10:34:52ID:???
志村さんうしろー
0501nobodyさん04/12/04 10:36:00ID:???
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/

移動
050249904/12/04 10:37:02ID:???
説明不足すまそ。
aが1、またはbが1のときにhogehogeを実行したいといった内容です。
0503nobodyさん04/12/04 10:45:27ID:???
くだらねぇ質問と、ここに書いて良い質問の境界線はどこですか?
0504nobodyさん04/12/04 10:48:35ID:???
>>503
スレ違い
0505nobodyさん04/12/04 11:10:57ID:???
>481
これでいいんじゃないの

<?php
function xxx(){
 if(!$_POST['text']) return "Error";

(データの整理、書き込み処理)

 return "Success";
}
?>
(HTML部分)
<p><?php echo xxx(); ?></p>
(HTML部分)
0506nobodyさん04/12/04 11:11:05ID:???
>>499は誰が見てもくだらない質問
050749904/12/04 11:22:05ID:???
こんな質問ごとき他スレに誘導させなきゃ答えられないのかよ、
世も末だな
0508nobodyさん04/12/04 11:28:00ID:???
くだらない以前に、何一つ読解力がない
こんなのでよく日常暮らしていけるもんだ
0509nobodyさん04/12/04 11:45:04ID:???
誰か以下のスレをたててくれ。

【ちらしの】日記はココに書け【裏】
0510nobodyさん04/12/04 13:23:00ID:???
>>508
もまえ、つられてるぞ
0511nobodyさん04/12/04 14:19:06ID:???
こんなのが釣りならこのスレ丸ごと釣りだよアッハッハ
0512nobodyさん04/12/04 14:27:06ID:mdd+eXUz
phpとmysqlでファームから情報の入力、修正、検索、削除、一通りの
ことが出来るシステムを作っています。
今のとこ一つのスクリプトファイルを$modeという変数でcaseで切り替えそれぞれの機能を
切り替えています。(hoge.php?mode=searchみたいな感じで)

これまで値をhiddenで渡したりしてたのですが、面倒くさくなってきたので
セッションを使おうと思っています。

主に情報の入力などはpost検索結果の条件保持と、modeの切り替えにはgetを使っています。
ひとまず、$HTTP_GET_VARSと$HTTP_POST_VARSをまとめて
$HTTP_SESSION_VARSに入れて値を引き継げるようにしたいのですが
このように複数の連想配列を一気に$HTTP_SESSION_VARSに入れてしまう方法が
わかりません。
このあたりについて参考になるサイト、又はアドバイスをいただけたらありがたいです。

0513nobodyさん04/12/04 14:59:58ID:???
>>512
配列を連結する関数があるのでそれを使えば
希望する動作をさせることはできますが、
セッションの仕組みを誤解してませんか?
セッションを使った場合、セッション変数の他に
通常のGET・POST変数を渡すこともできます。
0514nobodyさん04/12/04 15:10:21ID:???
セッション使ってもファームからはねぇ
0515nobodyさん04/12/04 15:11:59ID:???
農場から情報送ってどうすんだろう
0516nobodyさん04/12/04 15:29:24ID:???
牛乳でたーとかかなw
0517nobodyさん04/12/04 15:35:15ID:???
12:23分 1.5L
0518nobodyさん04/12/04 15:40:16ID:???
チーズの作り方を知りたいのですが、ファームから送信していただけないでしょうか。
0519nobodyさん04/12/04 16:15:54ID:???
鬼の首でも取りましたか?
052051204/12/04 16:16:54ID:mdd+eXUz
>>513
セッションは初めてでいまいち理解し切れていません。
やりたいことはとにかく、フォームの入力をページ
(実際は同じphpファイルですが)移動後も表示させたいのです。
0521nobodyさん04/12/04 16:17:13ID:???
http://cgi.aaacafe.ne.jp/
こんな感じのってどういう仕組みなのでしょうか?
単純にソースファイルアップロードして、パーミッション変更して、
って感じですかね?

友人に似たようなの作ってくれと頼まれてるんですが、
上記くらいの方法しか思いつかないんです。
結構だるいですよね、該当CGIがバージョンアップしたら
修正する手間も出てきますし。
0522nobodyさん04/12/04 16:50:27ID:???
友人に設置できるぐらいのスキルをつけさせた方がいいんでない?
0523nobodyさん04/12/04 17:01:07ID:???
>>521
tar.gz とかで圧縮されてるものをうぷしたら
派ミッションとか変更しなくていいんでなかった?
052451204/12/04 17:08:01ID:mdd+eXUz
postされた値をまとめてセッションに入れちゃう事って出来ないかさっきから考えてる

function insert_session($post_ary){//postされた値をセッション変数に入れる
global $_SESSION['$key'],$_POST['$key'];//←当たり前だけどダメだ
reset($ary);
while(list($key,$val) = each($ary)){
if(isset($POST['$key'])){
$_SESSION['$key'] = $_POST['$key'];
//↑whileで回しながら入れるけど、これはグローバルにならないっぽい
}
}
}

$post_ary = $HTTP_POST_VARS;
insert_session($post_ary);

だめだ、わからんです。
0525nobodyさん04/12/04 17:18:00ID:???
func inss($post_arr) {
  $_SESSION['foo'] = serialize($post_arr);
}

$_SESSIONはオートグローバル。
マニュアル読めば分かるネタはくだスレでやってくれ。
0526nobodyさん04/12/04 18:01:15ID:???
'のけたら普通にできるだろ
あとグローバル宣言はいらん

つうか何がしたいンだ、引数の役目は何だ
0527nobodyさん04/12/04 18:14:59ID:???
いいネタスレになってきたな。
0528nobodyさん04/12/04 18:23:53ID:???
↓親方、旬なネタ一つ
0529nobodyさん04/12/04 18:53:12ID:???
ttp://ex5.2ch.net/test/read.cgi/net/1101232607/
やヴぁいらすぃ
053048104/12/04 19:05:01ID:???
>>487-492, >>505
回答ありがとうございます。
ifを使って組んでみます。
レスが遅れてしまい、すみませんでした。
0531nobodyさん04/12/04 19:22:44ID:???
>>530
ネタレス参考にして馬鹿でかいブロックを作ったりしないように。
0532nobodyさん04/12/04 19:32:18ID:???
>>531
初心者にはmain()エントリ作る必要があるほうが分かりやすいのかもな
最近はJavaやRubyなんかの影響でmainにswitch文書くの嫌いな人もいるらしいけど、
PHPはどっちかっつーと構造化大好きPerl寄りのスクリプトが多いと思フ
0533nobodyさん04/12/04 20:03:11ID:???
$lines = $a<>$b<>$c
で記録してある配列$lines[]の中から、$bが重複した場合その配列を削除したい
(例)
$lines[0] = $a<>$b<>$c
$lines[1] = $a1<>$b3<>$c5
$lines[2] = $a<>$b<>$c5
$lines[3] = $a1<>$b6<>$c
これを$lines[0]と$lines[2]の$bの値が重複するため、後の$lines[2]を削除し
$lines[0] = $a<>$b<>$c
$lines[1] = $a1<>$b3<>$c5
$lines[3] = $a1<>$b6<>$c
としたいのですがどうすればいいでしょうか?
関数array_uniqueなどを使えばいいんでしょうか?

0534nobodyさん04/12/04 20:07:22ID:???
そういうのを考えるのが楽しいんだと思うんだが
0535nobodyさん04/12/04 20:10:23ID:???
usortにてbをソートの後、ループなりmapなりで連続して同じデータをもってたら削除。
0536nobodyさん04/12/04 20:12:36ID:???
ロジックを考えるのに夢中になって数時間つぶすのがプログラムの醍醐味だろ
ちったぁ考えろ
一晩考えて無理なら来い
053753304/12/04 20:16:29ID:???
すみませんでした。自分でいろいろと考えて無理なようでしたらまたヒントでも下さい。
>>535
ありがとうございました。参考にさせていただきます。
0538nobodyさん04/12/04 21:49:34ID:???
$fixed_lines = array();
$test = explode("<>", $line[0]);
$b = $test[1];
foreach($lines as $value){
 $fixed_value = explode("<>", $value);
 if($fixed_value[1] == $b){

 }else{

 }
}
$lines = $fixed_lines;

あー釣りでしたか、すまそ。
空行は考えてねw
0539nobodyさん04/12/04 22:08:18ID:???
全然だめじゃん、それ
0540nobodyさん04/12/04 23:42:20ID:???
掲示板作ってますが、PHPで簡単に串制限する方法ってありますか?
0541nobodyさん04/12/04 23:52:56ID:???
function is_blacklisted($addr) {
$chklist = array(
'niku.2ch.net',
'list.dsbl.org'
);
$ip = explode(".", $addr);
if ($ip) {
$rev = "{$ip[3]}.{$ip[2]}.{$ip[1]}.{$ip[0]}";
foreach ($chklist as $host) if (checkdnsrr("$rev.$host", 'A')) return TRUE;
return FALSE;
}
0542nobodyさん04/12/04 23:53:20ID:???
}
0543nobodyさん04/12/05 01:05:06ID:???
明日は、第23回 全国乳首相撲大会 開催

http://gazo01.chbox.com/wisecrack/src/1102017063590.jpg
0544nobodyさん04/12/05 01:50:37ID:???
>>531
言いたい事は分かるが、話の流れにあってないよ。
元の質問は success(), error() 関数を呼ぶのが前提で、
処理全体の制御構造をどうすればいいか、と言うのだったんだから。

関数に分割云々は、また別の話。
0545nobodyさん04/12/05 02:08:54ID:???
>>544
分岐までネタが出た後なんだからそりゃ別の話をしてるんだろ。
■ このスレッドは過去ログ倉庫に格納されています