【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辺り
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をバックグラウンドで動かし引数を与えたいのですが
どのように引数を渡し・受け取ればいいのでしょうか?
0791nobodyさん
2005/12/26(月) 15:04:39ID:???PHPのマニュアルのエロイとこはUserNotesという形で有用なコメントがあることだぬ
その話も載ってるよ。
ttp://jp2.php.net/manual/ja/function.system.php
0793nobodyさん
2005/12/26(月) 18:24:27ID:D+i6TPIN$array = ReturnArray();
$array[1]
と同じことを、イメージ的には
ReturnArray()->[1]
って感じでやりたいのでつが。
0794nobodyさん
2005/12/26(月) 18:35:02ID:???要はReturnArray()[1]ってやりたいんでしょ。
PHPはそういうのできないんだよね。
method()->propertyができるようになったのもPHP5出てからだし。
現時点では配列の要素へのアクセスは2行に分けて書くしかないかな。
配列の要素を一気に代入するなら
list(, $hoge) = ReturnArray();
でいけるけど。
0795nobodyさん
2005/12/26(月) 18:59:57ID:???方法はないんじゃないかね。頭と尻だけなら
array_shift()とarray_pop()で取れるけど。
どうしても欲しいならユーザ関数の方を
添え字付きでアクセスするようにするか。
0796nobodyさん
2005/12/26(月) 19:41:32ID:???0797nobodyさん
2005/12/26(月) 21:37:15ID:???$a[1] = 3;
$a[3] = 1;
$a[5] = 1;
$a[6] = 8;
$a[7] = 9;
とある時に、定義されてない$a[2]、$a[4]に空の値("")を入れて、並びもキー順にしたいのですが、今のやり方はまずforeachで回してチェックして定義されてなければ""を入れ
$a[0] = 1;
$a[1] = 3;
$a[3] = 1;
$a[5] = 1;
$a[6] = 8;
$a[7] = 9;
$a[2] = "";
$a[4] = "";
あとからキー順に並びかえてます。
$a[0] = 1;
$a[1] = 3;
$a[2] = "";
$a[3] = 1;
$a[4] = "";
$a[5] = 1;
$a[6] = 8;
$a[7] = 9;
どのキーが定義されてないか、というのと定義済みキーの値は変動します。
どなたかうまいやり方があればご教示願います。
0798nobodyさん
2005/12/26(月) 22:03:45ID:???キーの抜けチェックはforeachで回すしかないんじゃなかろうか。
そのforeachの書き方自体は何種類かありそうだけど。
キー順並び替えは ksort($a); で一発では?
0799nobodyさん
2005/12/26(月) 22:07:36ID:???0800nobodyさん
2005/12/26(月) 22:13:54ID:???そうですかー、並び替えもそれでやってます。一発でぽんとやってくれる関数とか無いかなーと探してまして。
>>799
並びかえないと>>797の二番目の順番のままなのであとの処理に影響が出てしまうので…
0801nobodyさん
2005/12/26(月) 22:19:36ID:???$max = max(array_keys($a));
for($i = 0; $i <= $max; $i ++) $a0[$i] = (isset($a[$i]))? $a[$i]: "";
$a = $a0;
0802nobodyさん
2005/12/26(月) 22:32:25ID:D+i6TPINdくす
Objectにする程でもないので2行で我慢します
行数より無駄に変数割り当てるのに抵抗あるんだが
Perl出身ですまそ
0803nobodyさん
2005/12/26(月) 22:39:43ID:???ありがとうございます。
一回別の配列に入れて整えるわけですね。やってみます。
どうやら一発でぽんとは無理っぽいですね。ユーザ関数にして使うことにします。
0804nobodyさん
2005/12/27(火) 01:08:06ID:???質問の内容はパフォーマンスです。当方で「ionCube PHP Accelerator」の環境が無いので
そのパフォーマンスをJAVA(jsp)と比べた値を得たいのです。
PHPのソースは以下の通り5000までの素数を得るものです。
0805nobodyさん
2005/12/27(火) 01:09:17ID:???// 処理開始時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$start = $sec1 + $sec2;
echo 'start = '.$start.'<br>';
// 5000までの素数を算出して表示する
for($i = 2; $i <= 5000; $i++) {
$divisor = 0;
for($j = 1; $j <= $i; $j++) {
if($i % $j == 0) {
$divisor++;
}
}
if($divisor == 2) {
echo $i.'<br>';
}
}
// 処理終了時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$end = $sec1 + $sec2;
echo 'end = '.$end.'<br>';
// 処理時間を算出して表示する
$elapse = $end - $start;
echo 'elapse = '.$elapse.'秒';
?>
0806nobodyさん
2005/12/27(火) 01:10:30ID:???<%@ page contentType="text/html;charset=Shift_JIS" %>
<%@ page import="java.util.*" %>
<%
long start = new Date().getTime();
%>
start = <%=start%><br>
<!-- 5000までの素数を算出して表示する -->
<%
int divisor;
for(int i = 2; i <= 5000; i++) {
divisor = 0;
for(int j = 1; j <= i; j++) {
if(i % j == 0) {
divisor++;
}
}
if(divisor == 2) {
%>
<%=i%><br>
<%
}
}
// 処理終了時間を取得して表示する
long end = new Date().getTime();
%>
end = <%=end%><br>
<!-- 処理時間を算出して表示する -->
elapse = <%=(float)(end - start) / 1000%>秒
0807nobodyさん
2005/12/27(火) 01:12:05ID:???単純に考えて、演算パフォーマンスを見ればJAVA(バイトコードをキャッシュするから当然と言えば当然)なのですが、PHPの開発効率も捨て難いです。
そこで、アクセラレータの機能を実感してみたいのですが、手元に10台あったPCが全部取り押さえされて
しまって無くなってしまいました。唯一あるのがこのWinXPなのです。どなたかFreeBSDでのアクセラレータの
速度を計ってもらえないでしょうか?WinXPにはionCube PHP Acceleratorが無いのです。
長くなってしまいましたがよろしくお願い致します。
ちなみに上記素数演算のソースはWEBからパクッてきたものです。
0808nobodyさん
2005/12/27(火) 01:23:40ID:???何があったんだw
■ このスレッドは過去ログ倉庫に格納されています