【PHP】質問スレッドpart31【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/11/27(日) 00:07:12ID:eBvjdczp【基本ルール】
・新規質問の方は上げてください。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辺り
0690nobodyさん
2005/12/23(金) 16:09:31ID:???正規表現なのは"/ab[0-9]/"側であって、$var側は関係ない。
正規表現のエスケープ方法もあるが、この質問はそれ以前に理解が足りてない。
0691690
2005/12/23(金) 16:12:23ID:???あと「ab.」の部分が可変で何が入ってくるか分からない、みたいな場合は、
preg_match("/".preg_quote($str)."[0-9]/", $var)
とすることで自動エスケープさせられる。
0693nobodyさん
2005/12/23(金) 17:56:59ID:???PHPの話じゃないし。
0694nobodyさん
2005/12/23(金) 18:02:44ID:???{if $var}○{else}×{/if}
とかやる場合は、どうするの?
設定ファイルに
v1 = '○'
v2 = '×'
とかやっておいて、PHP側で代入しておけばいいの?
ループ処理はどうするの?
パーツごとにテンプレートを分離して処理するの?
分岐とループはHTMLテンプレートには入っても仕方ないと思うけどねえ。演算なんかは予め処理しておくべきだろうけど。
0695nobodyさん
2005/12/23(金) 18:22:25ID:???> {if $var}○{else}×{/if}
> とかやる場合は、どうするの?
それが表示の切り替えに必要ならあっていいし、逆に表示のためのロジックが
主プログラム側に入り込んでるのも間違ってると思うな。
当然、表示のためのifやループはデザイン側に入ってて然るべきかと。
「表示」と「処理」の役割分担が分かってればレイヤー分けに迷わないんじゃ?
>>680はHTML表示の途中でDB接続の有無を切り替えてたりするのがおかしい。
0696nobodyさん
2005/12/24(土) 15:28:41ID:???私は、環境構築サイドの人間なのですが、
セキュリティ担当の部署から環境をなるべく
変更をされるのを好ましく思われないので
大きな脆弱性がでない限り環境を変更しない(UPDATEをしない)
環境が必要となっております。
PHP4とPHP5とPEARの導入等も考慮した場合
WebProgの方々から見た場合Verはいくつが妥当でしょか?
0697nobodyさん
2005/12/24(土) 15:47:08ID:???それはバージョンとは関係ないような...
セキュリティ担当が言うのはちまちましたセキュリティパッチなんて
当てたくねーよってこと? それとも、バージョンのメジャー番号が
変わるようなアップデートは運用ポリシー上望ましくないってこと?
前者ならそんな会社ヤヴァイし、後者ならセキュリティパッチを
ちゃんと後方互換性とか考えて作るベンダを選ぶ方が大事なのでは。
0699nobodyさん
2005/12/24(土) 16:45:45ID:???好ましく思わないのが開発担当ならまだ分かるがセキュリティ担当?
だったらPHPの脆弱性なんてマイナーバージョンが3つも上がれば山ほど出てくるから、
ほとんど毎回アップデートしないと意味ないと思うが。
PHPを大雑把にアップデートしないってのは、WindowsUpdateをこまめにかけずに
SPが出てくるまで待ってるのに等しい。
ユーザ側ならともかくセキュリティ担当がそれじゃダメだろ。
0700nobodyさん
2005/12/24(土) 20:21:14ID:???アパッチのバージョンアップどころの騒ぎじゃない。
0701nobodyさん
2005/12/24(土) 20:26:04ID:???PHPはまだ枯れていないから、心配ならperlとかにするしか無いな
0702nobodyさん
2005/12/24(土) 20:39:48ID:???そーそー。だから、普通はセキュリティ担当はアップデートしたがり、
開発担当は待ってくれと止める、というパターンになるんだよね。
セキュリティ担当もアップデートするつもりがないなら
いっそ4.3.4くらいのバージョンでも全然問題ないのでは。
現行の4.4.1とか、mb_send_mail()にバグあるしさー
0703nobodyさん
2005/12/24(土) 20:43:17ID:???4も5もそれぞれ最新版1個しかないんだから、選択の余地は無いよね。
>>696って、今のセキュリティ状態を確認した上でこの質問してんのかね?
0705nobodyさん
2005/12/24(土) 21:03:59ID:???0706nobodyさん
2005/12/24(土) 21:04:56ID:???0707nobodyさん
2005/12/24(土) 21:05:22ID:???以前実際に起こってちょっと参った…
0708nobodyさん
2005/12/24(土) 21:05:56ID:???0710nobodyさん
2005/12/25(日) 00:31:00ID:???0711nobodyさん
2005/12/25(日) 14:45:31ID:Tho8NAOlログイン時に、データベースのテーブルに登録済みのIDとPWにマッチすれば認証OKで
その後、自分のスケジュールやプロフィール変更が可能という感じに作りました。
ここで問題点だと思うことを見つけたのですが、
ローカルテストのみだったので、全てのMySQL接続に root@localhost を使用していました。
前までは Perl でテキストにIDとPW保存とかしてたレベルなので気付かなかったのですが、
MySQL接続自体に各個人のID・PWを使用して管理するほうが良いのでしょうか?
0712nobodyさん
2005/12/25(日) 15:00:55ID:???デフォルト管理ユーザのrootを普通に使ってちゃまずいだろ。
(権限変えてるなら別だが)
PHPアプリからの接続用に適当な権限を設定した
専用ユーザ作って、それ使え。
0714711
2005/12/25(日) 15:13:50ID:???$login_id = $HTTP_POST_VARS["login_id"];
$login_pass = $HTTP_POST_VARS["login_pass"];
$db_connect = mysql_connect("localhost", $login_id, $login_pass);
if ($db_connect == False) {
print ("認証失敗");
exit;
}
認証後の処理
こんな感じだと思いますが、
結局各個人のスケジュールやプロフィール編集などする場合、
その該当レコードを検索する必要があって、そこにはIDとかが必要だろうし…
ユーザごとにテーブル作成するのはありえないだろうし、
って書いてたら>>712さんキター
分かりました。予め通常のデータ操作のみ可能なユーザを作成し
ログインした人全員が、そのMySQLユーザで接続して書き込みすればいいのですか
ありがとうございました。
0715nobodyさん
2005/12/25(日) 16:41:24ID:???勿論アプリケーシンにもユーザという概念があるのだから
アプリケーションの部分でユーザアカウント処理と
その為にデータベース(ファイルでも良いけど)に
アカウント管理用のテーブルを設けるのだけどね。
0716nobodyさん
2005/12/25(日) 20:13:40ID:WvivzG1Iみたいなんだけど、何で?
PEARのXML_RSSオブジェクト->parseがダメなみたいっす。
ブラウザからスクリプトにアクセスすればちゃんと動くのに。
0717nobodyさん
2005/12/25(日) 20:49:11ID:???実行時のカレントディレクトリが違うんで相対パスがこけてるとか。
0718nobodyさん
2005/12/25(日) 21:41:54ID:hD4Vkj0e自分は現在
<?php echo "
〜〜〜
"; ?>
で、phpでホームページを作っているのですが、そのホームページの中に
ttp://php.s3.to/simple/#short
ここの「−ショートメッセージ−」という物を取り込みたいのですが、どうすればよいのでしょうか。
普通に取り込んでも
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
とエラーが出てしまい、取り込めません。
0720nobodyさん
2005/12/25(日) 21:55:47ID:hD4Vkj0eとりあえず「"; ?>」から下に、そのHPにかいてる
「<?
$lines = file($logfile);//ファイルを配列に読み込む
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
echo $lines[$i];
?>」
をかいて、メッセージボードを設置したい場所に
<td>
<form method=\"post\" action=\"<? echo $_SERVER['PHP_SELF']; ?>\">
<font face="Arial"><b>-ShortMessage- 自由に書き込んで下さい</b> <small>b,i,s,uタグ可</small></font><br>
<b>N:</b><input name=\"name\" type=\"text\" size=\"10\"
maxlength=\"10\" value=\"<? echo $_POST['name']; ?>\">
<b> : </b><input name=\"message\" type=\"text\" size=\"40\" maxlength=\"60\">
<input name=\"submit\" type=\"submit\" value=\" Send \"><br>
</form>
</td>
としてみたところ、エラーがでました。
0721nobodyさん
2005/12/25(日) 22:03:35ID:???全然普通じゃないじゃん。
> <form method=\"post\" action=\"
この辺のエスケープから察するに、フォームのHTMLをprintか何かで出力してるのか?
だったら
> <? echo $_SERVER['PHP_SELF']; ?>
これをそのまま書いてたらダメだろ。
0722nobodyさん
2005/12/25(日) 22:19:28ID:hD4Vkj0eすみません、ttp://php.s3.to/simple/#shortにはそう書いてありましたのでそうしてしまいました。
たしかに<? echo $_SERVER['PHP_SELF']; ?> の行でエラーがでます。
どのようにすれば改善できるのでしょうか。
0723nobodyさん
2005/12/25(日) 22:25:03ID:???0724nobodyさん
2005/12/25(日) 22:36:53ID:hD4Vkj0eなるほど、ありがとうございます。
じゃあttp://php.s3.to/simple/#shortに書いてある方法と同じですね。
そのページにかいてある方法では、
使用するページの拡張子を.phpにして、<?include("short.php");?>を挿入します。
と書いてありますが、 「<?php echo "」内に「<?include("short.php");?>」を書くとエラーが起きてしまいますが、
0726nobodyさん
2005/12/25(日) 22:49:49ID:hD4Vkj0ehttp://php.s3.to/tt/tt2.php
このページの真ん中にかいてある、
「<?php echo "<html><body text=\"#ffffee\" vlink=\"#ddaa55\">"; ?>」〜〜〜
を参考にしました。「<?php echo」内にHTMLを書いています。
それで、ttp://php.s3.to/simple/#shortには、「<?include("short.php");?>を挿入します。 」
と書いていたからです。
0727nobodyさん
2005/12/25(日) 22:56:42ID:???(<?php 〜 ?>外の)HTML内にある<?php 〜 ?>では意味が違う。
この辺の基本的な事を理解していないから変な事を書いているのでは?
そもそも元のページは<?php echo"〜"; ?>しか無いのか?
それで何でわざわざPHPで実行する?
0728nobodyさん
2005/12/25(日) 23:06:53ID:WvivzG1Iあ、cronに限らず、telnetでコマンドラインから実行してもダメでした。
$xmlrss->parse();とするとxml_rss objectが生成されている(print_rで確認)ので、
PEARのRSS.phpは読み込めてると思うんですが。。ただ、
[_error_class] => XML_Parser_Error
という値が入ってるのを発見。しかもRSSファイルに入ってる
データは全く取得できてないし。なんじゃこら。
コマンドラインから実行すると、外部サーバーのファイルに
アクセスできないとか?
0729nobodyさん
2005/12/25(日) 23:12:14ID:hD4Vkj0eページはindex.phpです。
そこに<?php echo"〜"; ?>を最初と最後にかいて、「〜」にHTMLを記述しています。
0730nobodyさん
2005/12/25(日) 23:15:36ID:???だから「echoの中のHTML」に<?php 〜 ?>は置けないんだってば。
ちょっと初心者用のphp本買ってきて最初から勉強しなさいな。
0731nobodyさん
2005/12/25(日) 23:20:15ID:hD4Vkj0eすみません、連休明けの休日にマジメに本買います。
では、「<?php 〜 ?>」が置ける「HTML」の記述ができるphpの記述方法はあるのでしょうか?
0732nobodyさん
2005/12/25(日) 23:21:57ID:WvivzG1Iそれより俺の質問に答えてくれ(笑)
コマンドラインは何が違うんだぁぁ
0734733
2005/12/25(日) 23:24:31ID:???0735nobodyさん
2005/12/25(日) 23:24:59ID:WvivzG1I最初:<?php echo"
最後:"; ?>
を取る。他に問題が無ければそれでHTMLの中のPHP部分は動くはず。
0736nobodyさん
2005/12/25(日) 23:30:28ID:hD4Vkj0e最初:<?php echo"
最後:"; ?>
を取ったところ、無事解決しました。ご協力ありがとうございます!メリークリスマス!11
0739nobodyさん
2005/12/25(日) 23:35:18ID:???関数の戻り値として クラスのインスタンスの参照を返したいのですが
可能でしたらその方法、もしくはキーワードを教えていただけませんか?
// サンプル
function GetInstanceOfFoo()
{
static $foo;
$foo = new Foo();
return $foo;
}
// ↓のようなことがしたい
GetInstanceOfFoo()->SetName("山田 太郎");
以上よろしくお願いします。
0740nobodyさん
2005/12/25(日) 23:38:54ID:???それを(意味のない)*.phpのページに設置しようとして、
そのまま適用しているので辻褄が合わなくなってる
(全体をechoで囲んでいるくだりを見るに)自分では応用しているつもりなのかも知れんが、
基本がなっていないのであくまでも「つもり」であって、実際は破綻している状況なのは
分かってるのかな・・・?
0741nobodyさん
2005/12/25(日) 23:47:21ID:???ちょっとコマンドラインから実行した状態でphpinfo()を出力してみた方がいいかも。
Web上で実行したときとPHPの設定がどっか違ってない?
0743nobodyさん
2005/12/25(日) 23:49:59ID:???うーん。まー、*.htmlに記述する場合、って言い方も間違ってると思うけどな。
<? include() ?>は少なくとも動かないといけないんだし、PHPである必要はある。
ただ、PHPはその中にそのまんまHTMLを書けるのに、わざわざ全体を
<?php 〜 ?>で括ってPHPコード化する必要なんて無かったってだけのことなんだよな。
0744nobodyさん
2005/12/25(日) 23:59:20ID:WvivzG1Iあ、PHPのバージョンは違ってますね。
PHP Version 4.4.2-devを使うように指定しているはずなんですが、
4.3.10になります。
0746nobodyさん
2005/12/26(月) 00:07:50ID:Zw5jS3w7ちなみにパーミッションは755。
0748nobodyさん
2005/12/26(月) 00:15:53ID:???クライアントじゃどうしようもないとオモ。
PHP4.4.2-devの絶対パスが分かるならそれで起動してみれ
0749nobodyさん
2005/12/26(月) 00:18:35ID:???#!でphpをフルパス指定してるんじゃないのか?優先度が絡みそうなのはPEARくらいかと。
その4.4.2-devと4.3.10って自分でインストールしたやつ?それともサーバー管理者?
2種類入ってる意図と、その使い分けがどうなってるのかが気になる…。
4.4.2側のCLI版phpを#!のとこで指定できれば解決できそうな気もするんだが。
他にphp.iniの内容が違ってないのなら、という条件は付くかもしれないけど。
0750nobodyさん
2005/12/26(月) 00:24:41ID:Zw5jS3w7http://www.sakura.ne.jp/news/archives/20051118-003.news
との事なので、4.4.2-devの絶対パスは分からないっす。
と言うか、これはバージョンの問題?って、そうか、fopenとかの設定?
ちょっと見てみる。
0751nobodyさん
2005/12/26(月) 00:31:09ID:???それで動くなら、Web版は.htaccessで設定をローカル変更してると見たが。
0752nobodyさん
2005/12/26(月) 00:39:09ID:Zw5jS3w7Web版を4.3.10で試す => 実行成功
もしや振り出し?
つーか、phpinfo()って、戻り値1なんだけど(笑)。
これの出力をトラップしてファイルに落とすのはどうしたら
良いのか分からず、今phpinfoチェックできず中。。
0753nobodyさん
2005/12/26(月) 00:42:50ID:Zw5jS3w7疲れた。
カフェオレ飲んで一息つくぞチクショー!
0754nobodyさん
2005/12/26(月) 00:50:09ID:???0756nobodyさん
2005/12/26(月) 01:12:09ID:???正規表現だけですべてに対応っていうのは厳しいですかね
0757nobodyさん
2005/12/26(月) 01:17:58ID:???いや、http://の後に「/」が出てくるまでの文字列抜き出せば良いだけの話だと思うが。
正規表現スレ行けば即効で答え返ってくると思われ。
0758nobodyさん
2005/12/26(月) 01:22:27ID:???0760nobodyさん
2005/12/26(月) 01:29:46ID:???phpinfoの結果を知りたいんじゃないの?
だったらリダイレクトしてFTPで引っ張ってくれば良いじゃない。何が微妙なんだ。
0761nobodyさん
2005/12/26(月) 01:40:05ID:Zw5jS3w7phpinfoをリダイレクトするってどういう事っすか?
0764nobodyさん
2005/12/26(月) 01:48:05ID:Zw5jS3w7>シェルで「>」付きで叩くか、ob_関数使えば?
>何か変なところで無知だな。
独学なんで、良く言われる。
そっかシェル使えば簡単だ。PHPでやろうと思ってた。
お陰様でphpinfo()は取得できたので(有難う)、
次は設定内容をチェックしてみる。
0765nobodyさん
2005/12/26(月) 01:59:00ID:???phpのバージョンが古い以外は同じみたいっす。
何か長引いてしまってるけど、付き合ってくれてる人有難う。
0767nobodyさん
2005/12/26(月) 02:10:49ID:???0768nobodyさん
2005/12/26(月) 02:21:35ID:???クッキーの使えない携帯のためにセッションを
URLに埋め込む方式を取っているのですが
マニュアルに書いてある通りこれは危険なので
(SIDを埋め込んだURLを他人に教えてしまった時など)
これとは別にDBにSIDとIPの対応表を作って
セキュリティを確保しようとしました。
これは良さそうだと思ったのですが、実装してみて
問題に気づきました。
なんと携帯はアクセスごとにIPが変わってしまうのです。
なのでアクセスごとに同じ人か判別する事が不可能になってしまいました。
セッションを使う際にこれを解決する方法って何かありませんでしょうか。
おねがいします。
0769nobodyさん
2005/12/26(月) 02:45:49ID:???これだと、google.comは表示されないです。
ただ、ブラウザから実行しても表示されないので・・
何かやっちゃってます?深夜でボーっとしてきた。
<?php
$file = 'http://www.google.com/';
$f = fopen($file, "r") or die("openエラー");
$string = fread($f, filesize($file));
echo "fopen_check<br>".$string;
fclose($f);
?>
0771nobodyさん
2005/12/26(月) 02:51:20ID:???0772nobodyさん
2005/12/26(月) 02:58:03ID:???0773nobodyさん
2005/12/26(月) 02:59:23ID:???au/vodafonは無条件で固体識別文字列を送ってくるこれをつかえ。
DoCoMoは公式サイトなら固体識別文字列をとれる。勝手サイトだと確認アリでとることが出来る。
0775nobodyさん
2005/12/26(月) 09:31:53ID:???亀レスだけどココにまとまっている。
最近の mbstring 関係のバグのまとめ
http://d.hatena.ne.jp/t_komura/20051105#1131202088
0777nobodyさん
2005/12/26(月) 10:24:49ID:IgYuuYFO今jpgraphを使っているのですがy軸のタイトルに日本語を使用したら
きちんと表示はされるのですが後ろの文字から上になってしまいます。
なにか対処法等あるのでしょうか?
ちなみにwindows phpは4.4.1です。
0778nobodyさん
2005/12/26(月) 10:34:09ID:???ここの意味がわからん。もう少し具体的に。
0779nobodyさん
2005/12/26(月) 11:16:43ID:IgYuuYFOあぁ、すみません。
テ ト
ス → ス
ト テ
っていう感じになってしまうのです。
0780779
2005/12/26(月) 11:17:41ID:IgYuuYFO0782777
2005/12/26(月) 11:51:06ID:IgYuuYFOま、まぁそうなんですけど・・。
ありがとうございました。
0783nobodyさん
2005/12/26(月) 11:54:10ID:???http://ns1.php.gr.jp/pipermail/php-users/2005-November/028129.html
0784777
2005/12/26(月) 13:14:15ID:IgYuuYFO色々すいません、ありがとうございます。
0785nobodyさん
2005/12/26(月) 13:43:42ID:nKfhQ7EH今回CGI版で動作させたいと思って、PHPのインストールからやり直してます。
./configure with-apx2=/usr/local/sbin/apxs \
--enable-cgi \
--enable-force-cgi-redirect \
〜〜〜あといくつかオプション〜〜〜
make install clean
こんな感じでインストールした後、httpd.confに
Action php-script /cgi-bin/php
Addhandler php-script .cgi .php
と追記し、apacheを再起動しました。
そして、
#!/usr/local/bin/php
<? echo "hello!"; ?>
とだけ書いた test.phpというファイルを作成してブラウザでアクセスすると、
#!/usr/local/bin/php hello!
という具合に、#!/usr/local/bin/php から表示されてしまいます。
ファイルの拡張子を.cgiにすると、そのようには表示されません。
拡張子が.phpの場合、インタプリタ言語として認識される前に、
先にモジュール版のPHPとして処理されているからだと思うのですが、
これは回避しようがないのでしょうか?
OSはFreeBSD5.4R Apache2.05で動作させています。
0786785
2005/12/26(月) 13:46:00ID:nKfhQ7EHモジュール版とCGI版の両方を使えるようにし、
どちらも拡張子はphpで動作させたくて、
ファイルの1行目にバイナリへのパスがある場合は、CGI版として動作させたいということです。
0789nobodyさん
2005/12/26(月) 14:11:19ID:???やっぱりできなくて当たり前なんですね・・・
それが当たり前なのかどうかが分からなくて(死)
すみません。
>>788
その手がありますね。
cgi-binとか作って、そこだけで動作とかですね。
ヒントありがとうございます。
0790nobodyさん
2005/12/26(月) 14:41:09ID:???処理用のPHPをバックグラウンドで動かし引数を与えたいのですが
どのように引数を渡し・受け取ればいいのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています