トップページ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辺り
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
0542nobodyさん2005/12/17(土) 17:04:23ID:???
>>539
roopは擬音か何かじゃないかな
0543nobodyさん2005/12/17(土) 17:08:35ID:???
>>54
0544nobodyさん2005/12/17(土) 17:10:13ID:???
いやみな奴らだなぁ…
05455202005/12/17(土) 17:15:20ID:???
linux上で implode("\n", $array) でやってみたら
余分に改行されてしまいます。

-------
1
2
3
-------

-------
1

2

3
-------
になってしまいました。
改行コードあたりの問題の気がしますが・・・。
0546nobodyさん2005/12/17(土) 17:15:25ID:???
>>541
オンラインの情報がまるで見つからないんだけど
0547nobodyさん2005/12/17(土) 17:16:17ID:???
>>545
>>523
05485202005/12/17(土) 17:29:30ID:???
>>547
サンクス、上手くはいったんだけど、
理由がよくワカラソ。
めんどくないひと居たら教えてクリ
05495202005/12/17(土) 17:35:48ID:???
あ、理解できただす。ありがとう
0550nobodyさん2005/12/17(土) 17:38:58ID:???
>>548
file関数は配列に読み込むとき行末の改行コードを削除しないんよ。
つttp://jp2.php.net/manual/ja/function.file.php

常にマニュアルを見て確認する癖をつけたほうが、上達早いよ。
0551nobodyさん2005/12/17(土) 17:40:08ID:???
520はそそっかしい奴だな。
0552nobodyさん2005/12/17(土) 17:45:35ID:???
ここで聞くべきなのかLinux板に行くべきなのか微妙なところですが・・・
Fedra以外のディストリビューションでPHP5が公式パッケージとして用意されているものはありますか?
0553nobodyさん2005/12/17(土) 17:51:46ID:???
>>552
つFreeBSD
0554nobodyさん2005/12/17(土) 18:35:45ID:???
>>532
作れる。ヒント:PEAR HTTP
0555nobodyさん2005/12/18(日) 00:32:43ID:???
phpである関数を1秒間に1回しか使えなくして、
仮に1秒間に複数回、関数が呼び出されたら、
1秒ごとに順に関数を実行する方法はありますか?
0556nobodyさん2005/12/18(日) 02:42:42ID:???
>>555
そのようにプログラミングすればできるんじゃね?
つシングルトン
0557nobodyさん2005/12/18(日) 05:35:07ID:???
sesseion.use_trans_sidが1に設定されているのですが、
リンクに自動でSIDが付きません。
クッキーをオフにしてやっても付きません。

これは何が原因なのでしょうか?
0558nobodyさん2005/12/18(日) 05:42:41ID:???
勘違いじゃないかねぇ。
現象が再現する短いソースを見せてちょ。
0559nobodyさん2005/12/18(日) 05:46:31ID:???
.htaccessでuse_trans_sidを設定 (phpinfoで確認済み)
同じディレクトリでindex.phpをおいて

<?php
session_start();
if (!is_set($_SESSION['count'])) $_SESSION['count'] = 0;
else $_SESSION['count']++;
?>

<html>
<body>
<?=$_SESSION['count']?><br>
<a href="index.php">link</a><br>
</body>
</html>
0560nobodyさん2005/12/18(日) 06:17:09ID:???
ついでにphpinfoの内容もコピペしとけ。
0561nobodyさん2005/12/18(日) 15:55:42ID:???
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 72000 1440
session.gc_probability 1 1
session.hash_bits_per_character 4 4
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path no value no value
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 1 0

あとこれかな

url_rewriter.tags a=href,area=href,frame=src,form=,fieldset= a=href,area=href,frame=src,form=,fieldset=
0562nobodyさん2005/12/18(日) 17:08:07ID:???
test
0563nobodyさん2005/12/18(日) 19:38:22ID:???
解決しました。

セキュリティレベルを最高まで上げたらできました。
ドメインでクッキーをはじくように設定していたのですが
なぜか反映されてなかったのです。。
0564nobodyさん2005/12/18(日) 23:55:14ID:???
クッキーを使わずに強制的にGETクエリーにSIDを乗せたい
(クッキーを使った方法は強制的になしにする)と思って
session.use_cookies を 0 に設定してみましたが、できませんでした。

何か凡ミスでしょうか。
それとも他に設定箇所があるのでしょうか。
0565nobodyさん2005/12/19(月) 01:51:02ID:???
当たり前。
セッションIDを受け渡す方法がないから。
ヒント:マニュアル セッションの受け渡し
0566nobodyさん2005/12/19(月) 02:08:24ID:???
2種類あるのは解ってますよ

方法はなくはないでしょう。
クッキーではなくURLに直接埋め込む方式でやりたいんです。
0567nobodyさん2005/12/19(月) 02:19:55ID:???
session.use_trans_sid は Onになってる?
0568nobodyさん2005/12/19(月) 02:27:11ID:R4UOoyTG
PHPを自分のPCでテストするのって難しいですね・゚・(ノД`)・゚・。
もうかれこれ4日も導入に悪戦苦闘してます。
0569nobodyさん2005/12/19(月) 02:34:32ID:???
簡単だよー。
0570nobodyさん2005/12/19(月) 02:41:49ID:???
>>567
はい。ちゃんとなってます。
0571nobodyさん2005/12/19(月) 02:42:22ID:nsaG6AgK
>>568
どこかのサイトか本みてやればすぐ終わると思うのだが
0572nobodyさん2005/12/19(月) 02:43:20ID:???
>>568
そんなあなたに

っ XAMPP
0573nobodyさん2005/12/19(月) 02:47:56ID:???
An Httpd使っているんですが、関連付けが詳しく書いてあるサイトが
もしありましたら教えてくださいm(_ _)m
Apatchの方は読めず、扱いが難しいので断念しました・゚・(ノД`)・゚・。
0574nobodyさん2005/12/19(月) 02:50:06ID:???
>>573
ttp://homepage1.nifty.com/yito/anhttpd/faq/php.html
このくらいしか知らない。
0575nobodyさん2005/12/19(月) 02:52:45ID:???
皆さんレスありがとうございます。
早速今から試してみます。
0576nobodyさん2005/12/19(月) 02:54:21ID:???
>>564
session.use_only_cookies はOnになってたりしないよね?
0577nobodyさん2005/12/19(月) 02:56:22ID:???
>>564
あと思いつくのは、リンクが全部絶対パス指定になっちゃってる場合とか…
(URL付加は相対パスしか変換しないのがお約束なので)
05785682005/12/19(月) 03:31:13ID:???
おかげさまでPHPテスト実行できました!
本当にありがとうございました!!
ほんの30分で出来た・・・今までの4日間はなんだったんだ・゚・(ノД`)・゚・
0579nobodyさん2005/12/19(月) 05:17:53ID:???
>>576
session.use_cookies Off On
session.use_only_cookies Off Off
session.use_trans_sid 1 0

こんな感じです。

>>577
相対パスで書いてます・・・
0580nobodyさん2005/12/19(月) 05:25:38ID:???
>>579
>>559のスクリプトを実行してみてもだめなの?
0581nobodyさん2005/12/19(月) 05:37:51ID:???
>>580
はい。
やっぱり何故かURLではなくクッキー経由でセッションが渡ってしまいます。
0582nobodyさん2005/12/19(月) 05:53:22ID:???
        /つ_∧  < エッ!セッションが使えないのかと思ってた。
  /つ__∧ 〈( ´_>`)
  |( ´_ゝ`) ヽ ⊂ニ) < OK兄者。漏れもそうだ。
  ヽ__と/ ̄ ̄ ̄/ |
    ̄\/___/ ̄ ̄
0583nobodyさん2005/12/19(月) 11:02:27ID:???
>>581
はぁ?クッキー使用OFFにしてるのにクッキーで渡るの?
そりゃ単にphp.iniの設定が反映してないだけじゃないのか。

phpinfoの表示確認。できれば実行してるプログラム上でini_get()で設定値を確認してみれ。
0584nobodyさん2005/12/19(月) 11:11:48ID:???
>>579

session.use_cookies Off On
クライアント側にセッ ションIDを保存する際にクッキーを
使用するかどうかを指定します。

session.use_only_cookies Off Off
このモジュールがクライアント側へのセッションIDの保存に
Cookieのみを使用することを指定します。

session.use_trans_sid 1 0
透過的なセッション IDの付加をするかどうかを指定します。
デフォルトは、0(無効)です。

よってcookieが使われるように貴方が設定しているのが原因。
マニュアル読もうな。な!
0585nobodyさん2005/12/19(月) 12:48:44ID:???
>>584
Off On
ってOffが優先されるんじゃないの?
0586nobodyさん2005/12/19(月) 12:58:19ID:???
2つ並んでいるのは、local value/master valueじゃ無いの?
local valueが有効なはず
0587nobodyさん2005/12/19(月) 12:58:37ID:???
>>585
あれ?Local Value、Master Value の順番だっけ?
なら間違い。
わからん。すまん。
0588nobodyさん2005/12/19(月) 13:02:42ID:???
おいらもどっちだっけ?と思ってphpinfo()を確認してみたが、
local masterの順なのでcookieを使わない設定になってるはず。
0589nobodyさん2005/12/20(火) 03:06:25ID:???
phpが最新のバージョンかどうか確かめる関数って無いんですか?
0590nobodyさん2005/12/20(火) 03:31:47ID:???
>>589
今使ってるやつより新しいバージョンのPHPが
リリースされたかどうかなんてどうやって検索するねん。
0591nobodyさん2005/12/20(火) 04:17:56ID:???
>>589
ない。「最新の」って情報がどっかから確実に入手できれば可能。
0592nobodyさん2005/12/20(火) 04:33:40ID:???
>>590 >>591
ってことは信頼できるトコから情報を入手して比較するしかないんですね。
ありがとうございました。
0593nobodyさん2005/12/20(火) 07:38:21ID:???
変数が

・セットされていない
・NULL
・空文字列

の時1を返して
それ以外で0を返す関数ってありませんか?

issetは空文字列の時の処理が異なりました。
0594nobodyさん2005/12/20(火) 07:40:25ID:???
isset($var) or $var === ''
でいいのでは?
0595nobodyさん2005/12/20(火) 09:47:38ID:???
!$var
0596nobodyさん2005/12/20(火) 11:28:53ID:???
$varが0だとそれもtrueになる
0597nobodyさん2005/12/20(火) 11:40:27ID:???
http://www.workspot.jp/tech/php_tips2.html
この辺参照
05985942005/12/20(火) 12:01:11ID:???
ミスった。
! isset($var) or $var === ''
だわな。
ハズカチ
0599nobodyさん2005/12/20(火) 18:00:13ID:???
PHPセッションについて質問です。

携帯用のメールフォームにて入力フォームを複数ページに分けて、
最終ページでメール送信というものを作成しています。
ページ間では各値をセッション変数に保持しているのですが、
過去2回ほど最初の方のページで入力した内容が消えてしまっていることがあります。
(各ページでは必須入力チェックを行っています)

このような現象が確認される場合、どのような原因が考えられますでしょうか。

ちなみに、この現象が起こったキャリアはauです。

PHP Version 4.2.3

session.auto_start Off
session.cache_expire 180
session.cache_limiter nocache
session.cookie_lifetime 0
session.cookie_path /
session.cookie_secure Off
session.gc_maxlifetime 1440
session.gc_probability 1
session.name PHPSESSID
session.save_path /tmp
session.use_cookies On
session.use_trans_sid 1
0600nobodyさん2005/12/20(火) 18:41:02ID:???
session.gc_maxlifetime 1440
0601nobodyさん2005/12/20(火) 18:57:00ID:???
>600
ガベージコレクションで最初の値削除されてしまってるということでしょうか。
な、なるほど。
0602nobodyさん2005/12/20(火) 19:07:56ID:Lk6o0b9n
PHP5.0.4ってどこからDLすればよいのですか?
本家に行ってもPHP5.1.1をDLするよう推奨されてて、PHP5.0.4をDL出来ないようなのですが・・・
どなたかDL出来るサイト等をご存知でしたら教えてください。
0603nobodyさん2005/12/20(火) 19:16:52ID:???
>>602
「Older versions of PHP」に思いっきりあるわけだが
0604nobodyさん2005/12/20(火) 19:45:29ID:???
>599
mixiとマルチポスト乙
0605nobodyさん2005/12/20(火) 19:52:50ID:???
mixiに誘ってください><
0606nobodyさん2005/12/20(火) 20:05:00ID:???
>>603
なぜか見落としてましたorz
0607nobodyさん2005/12/20(火) 23:49:31ID:/3BtbpNS
PHPの記述方法について教えてください。
今触っているプログラムの中で
以下のようなコードがあるのですが
これはどういった意味なのでしょうか?
文脈から判断してif文のような気がしているのですが実際のところなんなのかわかりません。

$stockDiff = (isset($selectRow['STOCK']))? $CSVRow[STOCK] - $selectRow['STOCK']: 0;
0608nobodyさん2005/12/20(火) 23:51:54ID:???
>>607
三項演算子
0609nobodyさん2005/12/20(火) 23:54:46ID:/3BtbpNS
三項演算子!?
ありがとうございます。
グ具ってみます。(^^)
0610nobodyさん2005/12/20(火) 23:54:54ID:???
>>607
if (isset($selectRow['STOCK']))
{
$stockDiff = $CSVRow[STOCK] - $selectRow['STOCK'];
}
else
{
$stockDiff = 0;
}

こんなかんじだ。
0611nobodyさん2005/12/21(水) 00:00:16ID:/3BtbpNS
>>609
ありがとうございます。
そのまま使わせていただきます。
0612nobodyさん2005/12/21(水) 00:13:08ID:???
今ひどい自演を見たw
0613nobodyさん2005/12/21(水) 02:54:53ID:???
アンカーミスにきつい突っ込みだw
0614nobodyさん2005/12/21(水) 11:14:58ID:uiIPgpa3
eAccelerator 0.9.4-rc1を PHP 4.3.11で使用しています。
Apacheを起動すると毎回
PHP Warning: Unknown(): Unable to load dynamic library './session.so' - Cannot open "./session.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './mysql.so' - Cannot open "./mysql.so" in Unknown on line 0
というエラーがでています。
eaccelerator.soの入っているディレクトリに上記2ファイルがあり、eaccelerator.soのファイルは読まれているようなのですが、そのほかが読まれてないようです。
php.iniで確認したところ、extension_dirは./ EnvironmentのPWDは/uar/local/etc/となっているので
session.soとmysql.soのリンクを張ってみると、今度はmysql関係のファイルが全部読まれてないらしく10KB近くのエラーログができてしまいました。

実際eaccelerator.phpを見てみると正常に稼働しているのですが、どうも気になります。
このエラーは放置してもいいのでしょうか?できれば対処法を教えてください。。

よろしくお願いします。
0615nobodyさん2005/12/21(水) 11:20:44ID:???
>>614
eaccelerator.so は一番最後に読み込む必要があったと思う。
06166142005/12/21(水) 12:01:43ID:???
php.iniの
[eaccelerator]
zend_extension="/usr/local/lib/php/20020429/eaccelerator.so"
eaccelerator.shm_size = "20"
eaccelerator.cache_dir = "/tmp/eaccelerator"
eaccelerator.enable = "1"...
を1番下に動かしてみましたが、
PHP Warning: Unknown(): Unable to load dynamic library './session.so' - Cannot open "./session.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './mysql.so' - Cannot open "./mysql.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './session.so' - Cannot open "./session.so" in Unknown on line 0
PHP Warning: Unknown(): Unable to load dynamic library './mysql.so' - Cannot open "./mysql.so" in Unknown on line 0
[Wed Dec 21 11:56:50 2005] [notice] Apache/1.3.34 (Unix) AuthMySQL/2.20 PHP/4.3.11 configured -- resuming normal operations
[Wed Dec 21 11:56:50 2005] [notice] Accept mutex: flock (Default: flock)
とでました。。

オプティマイザーはeAcceleratorしか使ってません。
0617nobodyさん2005/12/21(水) 12:16:36ID:???
>>616
OSは何?FreeBSDじゃまいか?
06186142005/12/21(水) 12:23:30ID:uiIPgpa3
そうです。
FreeBSD 4.11を使用しています。
これがいけないんでしょうか?..

ちなみにportsからインストールしています。
0619nobodyさん2005/12/21(水) 12:49:36ID:???
>>618
FreeBSDのportsでPHPをインストールすると、
/usr/local/etc/php/extensions.ini というファイルが作られて、
session.so とか mysql.so なんかはこのファイルで追加される。
そして、Apache起動時は /usr/local/etc/php.ini を読んでから、
extensions.ini が読み込まれる。

つまり、php.ini の最後に eaccelerator.so の設定を書いても
最後に読み込まれるわけではないのよ。

よって、extensions.ini の最後に eaccelerator の設定を書くか、
extension.ini の内容を php.ini に移してファイルを消せばいい。

ただこれだと ports を更新する度に同じ作業が必要になるので、
対応策を思案中・・・
ひょっとして適当なファイル名でeacceleratorの設定だけを書いておくと
extension.ini の後に読み込まれないかなと期待してるんだけど。
06206192005/12/21(水) 13:00:16ID:???
今試したらうまくいったよ。

/usr/local/etc/php/extensions2.ini
ってファイルを作って、そこにeAcceleratorの設定を書いておくと、
php.ini → extensions.ini → extensions2.ini の順番で読み込まれた。
ファイル名のソート順でよかったもよう。
■ このスレッドは過去ログ倉庫に格納されています