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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/11/27(日) 00:07:12ID:eBvjdczp
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。

過去スレ、関連リンク、FAQ等>>2-10辺り
04424332005/12/12(月) 16:22:23ID:???
・・・ああ
>>435でいいような。スマソ、ちょっと眠い。
0443nobodyさん2005/12/12(月) 16:29:14ID:???
>>441
やっぱり、>>440の(1)だった…
0444nobodyさん2005/12/12(月) 16:34:22ID:???
>>443
いや、1-3全部
0445nobodyさん2005/12/12(月) 16:48:53ID:???
>$arei[0][1]みたいに扱うのがいやで
そんな理由かよ
0446nobodyさん2005/12/12(月) 17:04:58ID:???
>>428
取り合えず、FTPのファイル転送で文字コードを
変換してしまってないか確認してみれ。
0447nobodyさん2005/12/12(月) 23:38:20ID:???
おまいにはサクラは敷居が高い。
もっと廚でも使える鯖業者と再契約が必要。
0448nobodyさん2005/12/13(火) 00:20:06ID:???
>>447
なにそれ?難易度の高い鯖とかあんの?
0449nobodyさん2005/12/13(火) 00:22:09ID:???
自分が使っている=難易度が高い
PHP の思想だね
0450nobodyさん2005/12/13(火) 10:37:41ID:???
正直428にPHPは無理でしょ。
HTMLとか画像うpが精一杯。

PHPは業者にでも依頼しな。
0451nobodyさん2005/12/13(火) 16:11:09ID:vrSu5coJ
while ($row = mysql_fetch_array($result)) {

この文の意味がいまいちわからないのですが、
whileの()内って条件式ではないですよね?
(条件式なら $row==になるはずですよね)

$row = mysql_fetch_array($result);
while ($row) {
でもOKなんでしょうか?
0452nobodyさん2005/12/13(火) 16:21:20ID:???
>>451
if ($i=0; $i<mysql_num_rows($result); $i++){
}
ということだよ。
0453nobodyさん2005/12/13(火) 16:30:44ID:???
いや、条件式だろ。
真である限りループしろって構文なんだから。
0454nobodyさん2005/12/13(火) 16:34:46ID:???
数値の 0
空文字列
null
false

それ以外全部 真
0455nobodyさん2005/12/13(火) 16:37:39ID:???
>>451
>$row = mysql_fetch_array($result);
>while ($row) {
これだと無限ループ
0456nobodyさん2005/12/13(火) 16:44:08ID:???
>>451
「$row = 〜」の部分はそれ自体も値を持つってことを理解しましょう。
$x = ($row = 〜); ってこともできますがな(←この場合のカッコはなくても同じ)。
while ($row = 〜)ってのは「$row = mysql_fetch_array(〜)」の部分全体がmysql_fetch_arrayの戻り値になる。
戻り値はマニュアルに書いてあるよね。

>>454
他にも
array()
"0"
なんてのもあるのがPHPクオリティ。
しかも
"\0"
は真なのもPHPクオリティ。
0457nobodyさん2005/12/13(火) 17:31:10ID:???
それはPerlクオリティを引き継いだだけ
0458nobodyさん2005/12/13(火) 17:32:43ID:???
>>452
そこforだろ
0459nobodyさん2005/12/13(火) 17:35:02ID:???
>>451
$row = mysql_fetch_array($result);
while ($row) {
処理
$row = mysql_fetch_array($result);
}
ならOK
0460nobodyさん2005/12/13(火) 17:38:15ID:???
while(true) { //ずっと繰り返す
 $hoge = mysql〜(); //値を得る
 if ($hoge == FALSE) break; // $hogeが空なら繰り返しを止める
 # $hogeをごにょごにょ
}
これと同じ意味
0461nobodyさん2005/12/13(火) 17:56:36ID:???
>>451
while (A) { B }
(1) Aを評価
(2) Aが真ならBを実行後(1)に戻る、偽ならBを実行せず次のステートメントへ

おまいが勘違いしてるのは、(1)のAの評価の部分
Aは単純な変数である必要はなく、式そのものも評価対象に出来る
while ($hoge = func()){ ... } なら func() を実行して$hogeに代入された戻り値が評価対象になる
同様に、while (func()) { ... } なら func() の戻り値そのものが評価対象になる

while ($row = mysql_fetch_array($result)) { B } の場合
(1a) mysql_fetch_array($result)を実行
(1b) 戻り値が$rowに代入される
(2) $rowが真ならBを実行後(1a)に戻る、偽ならBを実行せず次のステートメントへ
0462nobodyさん2005/12/13(火) 18:36:03ID:???
while ($row = mysql_fetch_array($result))とか、ファイルもそうだけど、
>>454の言う
「数値(文字)の0」が偽になるんで、気をつけてないとヤバス。
0463nobodyさん2005/12/13(火) 18:39:16ID:???
しかし>>451はもういないらしい。
このスレ質問するだけして去っていく人多いね。
サビシス
全部釣りかな?
0464nobodyさん2005/12/13(火) 19:12:34ID:???
PHP Variable Tests (Null 0等が isset()などの関数でどういう扱いになるかの一覧表)
ttp://www.deformedweb.co.uk/php_variable_tests.php
04654282005/12/13(火) 19:45:11ID:0K/So0+j
>>447
オススメの鯖とかある?
0466nobodyさん2005/12/13(火) 20:39:57ID:l7fxNabV
>>463
のちに誰かのために役立つよ。俺は勉強させてもらってるよ。
0467nobodyさん2005/12/14(水) 04:21:42ID:???
一日位は待ってみてもいいんじゃないかと
0468nobodyさん2005/12/14(水) 05:38:47ID:cm5ebMj8
(isset($page)) ? $start = $page : $start = 0;

この一文の意味がよくわからないので
頭のイイ人おしえてください
0469nobodyさん2005/12/14(水) 05:43:41ID:???
PHPのスクリプトで503エラーが頻発するんですが、
これって相手の回線の太さも原因の1つですか?
0470nobodyさん2005/12/14(水) 06:27:01ID:???
>>468
そんな事より、その例のものは何でこの様に書かないんだろうね?
見ていて気持ち悪い。

$start = isset($page) ? $page : 0;
0471nobodyさん2005/12/14(水) 06:29:26ID:???
$pageのバリデーションはフレームワーク側でやってるんだろうか?
0472nobodyさん2005/12/14(水) 06:33:20ID:???
>>468
つ[三項演算子の解説、代入式の概念]
0473nobodyさん2005/12/14(水) 06:35:01ID:???
>>470
三項演算子をifの置き換えと思考してるからじゃない?
0474nobodyさん2005/12/14(水) 09:05:11ID:cm5ebMj8
>>470
>>472
サンクス参考になりました
0475nobodyさん2005/12/14(水) 13:17:30ID:nQISVs9q
みんな三項演算子って使ってるの?
0476nobodyさん2005/12/14(水) 13:19:26ID:???
適宜。
0477nobodyさん2005/12/14(水) 14:32:51ID:4Y8+DJWg
ある変数が同じ縦のデータを横に表示したいのですが、方法が思い浮かばず詰まっています。

while (DBからのデータ) {
$id
$name
$category
}

$categoryが同じ場合「、」で区切って$nameを横に表示したいのです。


こんな感じに表示させたい
id category name、name
id category name
0478nobodyさん2005/12/14(水) 14:35:39ID:???
>>477
DBから、category を order にしてデータを取り出し、
ループ中で前カテゴリ名を保存する変数を容易する。

っていうか、同じ category なら、idも同じなのそれって。
04794772005/12/14(水) 19:20:14ID:???
>>478
idはプライマリキーです、その方法でもやってみたんですがなんか途中で訳分かんなくなって止めました

とりあえず最初にカテゴリだけSelectしてwhile中にnameをselectって方法でいけました
0480nobodyさん2005/12/14(水) 19:53:30ID:???
>>479
賢くない方法だね。クエリがカテゴリの数だけ発行されてシマウマ。
0481nobodyさん2005/12/14(水) 20:23:26ID:???
そうなんですけど、他の処理方法が思いつかなくて・・・
0482nobodyさん2005/12/14(水) 20:47:41ID:???
>>481
DBがMySQLでバージョン4.1以降であれば、group_concatを使えばスッキリ書けるかもね。
他のDBならストアドで一時テーブルに書き出すとか。
categoryが重複した時、どのレコードのidを出力しているのか良く判らんが。。。
0483nobodyさん2005/12/14(水) 20:52:18ID:WftevBRF
fopenをftp関数経由で使用する場合どんな感じにすればよかとでしょうか?
ftp_fopenみたいな関数があればいいんですが。
0484nobodyさん2005/12/14(水) 21:22:53ID:???
ftp_fget,ftp_fput
ただしLocalファイル
0485nobodyさん2005/12/14(水) 22:17:34ID:???
セッションを使って入力フォームを作ってるのですが、
入力画面と確認画面を行ったり来たりしていると、
セッションが消えたり、古いセッション値が表示されたりします。
このような現象の対策はありますか?

バージョンはPHP 4.3.11です。
PHP 4.2.4では大丈夫でした。

■入力画面
session_start();
if ($_POST['hoge']) $SESSION['hoge'] = $_POST['hoge'];
header("Location: 確認画面");

■確認画面
session_start();
echo $_SESSION['hoge'];

0486nobodyさん2005/12/14(水) 22:24:58ID:???
header()使って確認画面にすっ飛ばす理由が分からん。
<form>のターゲットを確認画面にすればいいのに。

>セッションが消えたり、古いセッション値が表示されたりします。
$_POST[hoge']が空の時の動作がないからでしょ。
0487nobodyさん2005/12/15(木) 05:47:17ID:???
最近フォームの質問、それも同じような質問ばかりだが、同一人物か?
無理なことは無理
あ き ら め ろ
0488nobodyさん2005/12/15(木) 12:40:13ID:UeTwmalZ
>>485
ブラウザの戻るボタンで行き来してるのなら
何が起きるかわからんと思ったほうがいいかも
04894852005/12/15(木) 14:06:50ID:???
>>486
入力チェックが入るので、headerで飛ばしています。

>>487
同一人物ではありません。

>>488
戻るときはリンクで戻っています。

下記でも試してみましたが、b.phpとc.phpをリンクで行ったり来たりしていても、
「ほげ」が表示されたりしなかったりします。
どこが悪いのでしょうか?

■a.php
session_start();
$SESSION['hoge'] = "ほげ";
print $_SESSION['hoge'];

<a href="b.php">Bへ</a>

■b.php
session_start();
print $_SESSION['hoge'];

<a href="c.php">Cへ</a>

■c.php
session_start();
print $_SESSION['hoge'];

<a href="b.php">Bへ</a>
0490nobodyさん2005/12/15(木) 14:25:45ID:???
まずセッションの有効時間はデフォで1440秒
最終アクセス時間をセッションに入れといてそれから何秒たったら再パスワード入力画面に飛ばすとかしたらいいんじゃ
0491nobodyさん2005/12/15(木) 16:31:20ID:???
>>489
とりあえず

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta equiv="expires" content="0">

とか書いてる?
0492nobodyさん2005/12/15(木) 18:33:48ID:???
>490
そんなことしてんの?
0493nobodyさん2005/12/15(木) 18:42:01ID:???
--------------------------------------
■a.php
session_start();
$SESSION['hoge'] = "ほげ";
print $_SESSION['hoge'];

<a href="b.php">Bへ</a>
--------------------------------------

とりあえず.......
$SESSION['hoge'] = "ほげ";

$_SESSION['hoge'] = "ほげ";
なのだが


誰か突っ込め
0494nobodyさん2005/12/15(木) 20:26:32ID:???
>>493
そっとしといた方がいいんじゃないのか
0495nobodyさん2005/12/16(金) 20:00:21ID:FlVjXK6k
掲示板の連続投稿禁止させたいと思ってますが、
COOKIEを使った連続投稿禁止ができません。

if("hoge"==$_COOKIE['entry']){
  print("連続投稿のため、しばらくたってから投稿してください。");
  exit;
}else{
  setcookie("entry", "hoge", time()+60);
}


何卒、よろしくお願いします
0496nobodyさん2005/12/16(金) 20:03:21ID:???
ハァ!?
0497nobodyさん2005/12/16(金) 20:19:47ID:???
>>495
せめて「どうできないのか」位は書こうな
0498nobodyさん2005/12/16(金) 20:29:55ID:???
>>495
いや、どう見てもそれでできるよ
0499nobodyさん2005/12/16(金) 20:32:59ID:???
495は下質と同じ人かな
どうせクッキー蹴ってたりクッキー発行する前に何か吐いてたりするんでしょ
エラー表示を出してないだけな気ガス
0500nobodyさん2005/12/17(土) 01:27:33ID:5Cdk6RwA
execを使ってjavaコマンドを実行しようとしているのですが
戻り値にint(1)が帰ってきてエラーがおきています
このエラーの内容を知る方法ってありますか?

PHP 4.4.0
Java 1.4.2_10-b03
0501nobodyさん2005/12/17(土) 01:33:43ID:???
>>500
お願いだから、マニュアルくらい読んでくれるかな?
0502nobodyさん2005/12/17(土) 01:47:31ID:???
最初からjavaで作ればいいのに。
phpしか知らないの?
0503nobodyさん2005/12/17(土) 01:58:16ID:???
>>500
>>501-502は無視するとして、もうちょっと詳しく状況書いてみ。
0504nobodyさん2005/12/17(土) 02:05:59ID:???
>>503
おまいももうちょっと詳しくマニュアルを読んでみ。
0505nobodyさん2005/12/17(土) 02:08:52ID:???
>>504
おまいよりは読んだお^^;
0506nobodyさん2005/12/17(土) 03:06:03ID:???
>>505
回数の問題じゃねぇっ
0507nobodyさん2005/12/17(土) 05:03:10ID:???
とりあえず500は
http://jp.php.net/manual/ja/ref.exec.php
ここ読んで好きなの選べ
0508nobodyさん2005/12/17(土) 11:11:45ID:???
>>500
Internal Server Error
0509nobodyさん2005/12/17(土) 11:25:44ID:UrRJ5TVl
PHPの勉強を初めて1ヶ月ぐらい経つのですが、
初心者にお勧めのリファレンスってありますか?
0510nobodyさん2005/12/17(土) 11:36:30ID:???
>>509
1ヶ月も勉強したならば、あなたはもうルーキーFじゃなくビギナーDです。
0511nobodyさん2005/12/17(土) 12:32:40ID:???
ぱにゃ!
0512nobodyさん2005/12/17(土) 13:27:54ID:BoimMDuj
長年ブランクがあった。3年間だけど。。

以前は、経歴詐称常駐会社につとめていて、
ぼろぼろにされて、5ヶ月でやめた。Javaをやっていた。

全くのプログラム初心者なら話は別だが、他の言語を多少なりとも
やっていた人には、お奨めできるものがある。

一番、その言語に早く慣れたいなら、オライリーの一番簡単な本を読むのが
一番手っ取り早いし、安上がり。

PHPなら「始めてのPHP5」という本がある。
Perlなら「初めてのPerl」という本がある。ちなみにC++にも同シリーズは
ある。

JavaとCは知らん。。
0513nobodyさん2005/12/17(土) 13:28:51ID:???
>>512
リクエストは「リファレンス本」らしいよ
0514nobodyさん2005/12/17(土) 13:40:22ID:???
リファレンスってあんまりないよな〜。

でも、重宝するのが
http://www.amazon.co.jp/exec/obidos/ASIN/4798008850/250-0988500-3279408
だよな。やっぱ。初心者レベルから中級者くらいまでは、これが役に立つでしょ。

俺は、OracleとJavaのこのシリーズもってたけど、
かなり役立ったよ。
0515nobodyさん2005/12/17(土) 13:42:03ID:???
ちなみにページを下にスクロールすると見えると思うんだけど、
PostgreSQL&MySQLリファレンス。

MySQLとPostgreSQLの最初の設定とかはネットで調べるなり
本を買うなりしないとダメだけど、その後役に立つよ。

0516nobodyさん2005/12/17(土) 14:04:05ID:???
Perlの時は、青ラクダを買ったなぁ。
Perlだけでなく、Webアプリのための一般的なプログラミング知識も得られた。

PHP版もあるの?
0517php4(sax)でのxmlの処理2005/12/17(土) 14:06:49ID:???
ブラウザから入力されたデータを、
決まった形式のxmlに変換して保存しようと思っています。

htmlタグが入力されたとき、
1:タグをエスケープしてxmlに変換
して保存してる訳ですが、そのログをxmlパーサで読むとき、
2:エスケープされたタグ文字が解釈されて"<"とかに戻る
ので、
3:タグ文字をエスケープし直してブラウザに出力

3回も変換処理が入っていて、なんだかものすごく無駄なことしてる気がするんですが、
うまい方法ないですかね。
cdata使うと、終端文字が入力できないし……
0518nobodyさん2005/12/17(土) 14:08:49ID:???
なにはなくとも、公式マニュアル。
どうしても本がよければ「技術評論社刊:PHPポケットリファレンス」
これでOK
0519nobodyさん2005/12/17(土) 14:32:55ID:nttpIBA6
本の話題があるんで便乗して聞きたいんですけど、
PHPでプログラムする際にセキュリティに関して詳しい本ってありますか?
0520nobodyさん2005/12/17(土) 14:41:32ID:???
file関数で配列に一旦格納してから
再度配列を一つのファイルに戻したいと考えています。
何かグッドな関数や方法があったらキボンヌ
0521nobodyさん2005/12/17(土) 14:46:21ID:???
>>519
PHPじゃないけどこれ。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/

同じ事をPHPでもやればいい。
0522nobodyさん2005/12/17(土) 14:48:07ID:???
>>520
改行コードで implode してファイルに書き戻せば良いのでは?
05235522005/12/17(土) 14:49:59ID:???
fileで読み込んだときに改行コードがそのままなら、何も足さずにimplodeすればいいな。
確認してね。
0524nobodyさん2005/12/17(土) 15:19:20ID:???
フォームによる入力ページで、一度POSTで違うページに行っても
ブラウザの戻るボタンで戻ると必ずフォームの値が残っているサイトが
あるような気がしますが、どのように実現してるのでしょうか

あるいは、こうしたフォームページでの入力値の
ブラウザ側での保持時間というのはこちらでコントロールできる
ものなんでしょうか
0525nobodyさん2005/12/17(土) 15:25:25ID:???
送信フォームのhtmlページでsendmail.phpファイルを
読み込ませて入力結果などを表示させるスクリプト使用なのですが
テストサイトでは何の問題もなく送信結果などが実行されていたのに
いざ先方のドメインサーバーにupしてみて試しに記入せず送信ボタン
押してみると*必須記入欄の未入力エラーとして実行されるべき
画面に以下の表示結果が出て困っています。

Warning: Invalid argument supplied for foreach() in /home1/○○○.ne.jp/WWW/sendmail.php on line 132

Fatal error: Call to undefined function: mb_convert_encoding() in /home1/○○○.ne.jp/WWW/sendmail.php on line 141



ちなみに上の方Warning: 〜とかかれた行は数字違いで同じ内容であと3っつ程ありますが略してます。
もちろんphp対応のサーバーです。
WWWというのが先方サーバーの先頭ディレクトリーなんです。


0526nobodyさん2005/12/17(土) 15:28:22ID:???
>>524
つブラウザキャッシュ
つHTMLのMETAタグ
0527nobodyさん2005/12/17(土) 15:30:30ID:Hbd/Rmjf
fopen→freadでよみこんだテンプレはeregとかで置換できるのに
includeで読み込んだファイルは置換できません。


同じ「読み込む」なのに後者だけできないのはなぜですか
0528nobodyさん2005/12/17(土) 15:43:29ID:???
>>525
くだらない。実にくだらない。
せっかくメッセージを出しているのに、なぜそれを理解しようとしないの?
0529nobodyさん2005/12/17(土) 15:45:39ID:???
下らない質問文は「ドラえも〜ん」で書き始めるとよい
0530nobodyさん2005/12/17(土) 15:50:44ID:???
>>527
テンプレって何ですか?
あと、freadとincludeは”同じ「読み込み」”ではありません。
http://jp.php.net/manual/ja/function.fread.php
http://jp.php.net/manual/ja/function.include.php
どこが違うかは、日本語が理解できる人ならばマニュアルを読めばわかります。
0531nobodyさん2005/12/17(土) 15:51:26ID:???
質問する前にテンプレくらいは見ような。
>>4とか>>5とか。

>>529
不覚にもワロタ
0532nobodyさん2005/12/17(土) 16:00:56ID:???
リンクチェッカー http://www.ai2x.com/
みたいなものをPHPでも作ることって可能ですか?
0533nobodyさん2005/12/17(土) 16:03:23ID:Hbd/Rmjf
>>530
サンクス日本人なので今から理解してきます
0534nobodyさん2005/12/17(土) 16:16:35ID:???
ドラえも〜ん。
うちのパソコンは優秀だから「どらえもん」と入力すると
「ドラえもん」とドラがカタカナの正しいドラちゃんが出てくる。
0535nobodyさん2005/12/17(土) 16:30:27ID:???
>>522
それってグッドなのか?
確かに見た目スマートでかっこよさげなコードになるけど、
普通にroopして1行ずつ書くほうが所要時間はやくね?
0536nobodyさん2005/12/17(土) 16:33:06ID:???
バッファリングやOSの実装にも影響されるが
速くなる要素はないな
0537nobodyさん2005/12/17(土) 16:51:44ID:???
>>535
パフォーマンスが気になるならベンチ取るなりして確認してくれ。
そいでその結果を公表してもらえるとありがたいな。
05385202005/12/17(土) 16:56:25ID:???
>>522
うぉーありがとう!!
このためだけに10数行のコードを書いちゃうところでした。
0539nobodyさん2005/12/17(土) 16:56:27ID:???
roopってどうやるんですか?
0540nobodyさん2005/12/17(土) 16:59:40ID:???
for
0541nobodyさん2005/12/17(土) 17:02:19ID:???
http://en.wikipedia.org/wiki/ROOP
■ このスレッドは過去ログ倉庫に格納されています