【PHP】質問スレッドpart30【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/10/25(火) 06:50:06ID:Q4oGlTH3【基本ルール】
・新規質問の方は上げてください。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辺り
010290
2005/11/01(火) 20:33:52ID:???> ところでahya.php側でセッションを受け取るわけだけど、こちらで再度session_start()って宣言する必要
> あるの?それとも$_GET['PHPSESSID']で直接session_id受け取って代入しちゃって良いのかな?
自己レス。
さっきクッキーオフにして試してみたら、URLにsession_idをPHPSESIDに渡すだけで正しく
セッションが引き渡されていたよ、受け取り側ではGETとか使って細工したわけではないのに。
なんか不思議ぃ〜ヽ(´ー`)ノ
0103nobodyさん
2005/11/01(火) 21:40:54ID:???--- 1.php ---
<?php
session_name('mysessionid');
session_start();
$_SESSION['test'] = 123;
$name = session_name();
$id = session_id();
echo "<a href=\"2.php?{$name}={$id}\">next</a>"
?>
--- 2.php ---
<?php
//session_name('mysessionid'); ワザとコメント
session_start();
echo $_SESSION['test'];
?>
010490
2005/11/01(火) 23:23:04ID:???2.phpで session_start(); するとき、
a) session_name('ほげほげ');
b) クッキー
c) URL
の優先順位でセッションを見つけていくというわけね。
で、今2.phpではa)がコメントアウトされていて、クッキーもオフにしているから
URLを参照しに行ったと。URLの引数の中でとある変数名ととある値の
組み合わせが、あらかじめストアされていたセッション名とセッションIDに
合致していたらセッションを引き渡すというのかな?
逆に言うと悪い奴があてずっぽでセッション名とセッションIDを当ててしまったら、
URLにその値をぶち込むことで他人のIDになりすましたりすることもできると・・・
0105nobodyさん
2005/11/01(火) 23:48:55ID:2mWy/qga(【PHP】下らねぇ質問はここに書き込みやがれpart12 からきました)
ImageMagickをPHPから使用しています。(さくら:Apache.1.3 FreeBSD)
フォントはインストールされているものではなく、
/home/hoge/fonts/
というフォルダを作りttfファイルを入れているだけです。
<?php
$convert = "/usr/local/bin/convert";
$text = "Japan日本語";
$text = mb_convert_encoding($text, "UTF-8", "SJIS");
$font = "/home/hoge/fonts/ipam.ttf";
passthru("convert -encoding UTF-8 -size 620x100 xc:transparent -font $font -pointsize 72 -draw \"text 20,65 $text\" test.png");
?>
のように$tectの部分が「英語+日本語」なら表示されるのですが、
$text = "日本語";
のように「日本語のみ」の場合文字を描画することができません。
どこが悪いのでしょうか?
0106nobodyさん
2005/11/02(水) 00:10:22ID:???ImageMagickで日本語は無理じゃない?
GDで元になる画像作って、必要ならImageMagickで加工するってのがいいのでは?
0107前スレ999
2005/11/02(水) 01:00:17ID:???ナンチャラをonにすると勝手にリンクにPHPSESSIDを入れてくれる機能があるから、それを使ったらどうかといいたかった。
たしかsession.use_trans_sid。
010890
2005/11/02(水) 01:05:29ID:???自鯖では設定は変えられるんだけど今同時に使ってるレン鯖ではoffに設定されているみたい。
というわけでリンクに入れる方法で試してみるよ。
010990
2005/11/02(水) 01:14:17ID:???ん、実際にテストしたら予想と違った( ゚Д゚)
2.phpを次のように書き換えたんだが
--- 2.php ---
<?php
//session_name('mysessionid'); ワザとコメント
session_start();
echo $_SESSION['test'];
print "session_name = " . session_name() . "<br>";
?>
表示されるsession_nameはPHPSESSIDのままだった。
ちなみに「わざとコメント」の行のコメントを外すと'mysessionid'という
文字が表示された。
URLで渡したとき
echo "<a href=\"2.php?{$name}={$id}\">next</a>"
じつは2.phpでは$nameの部分は全く無視している(見ていない)?
0110nobodyさん
2005/11/02(水) 01:23:23ID:???現在さくら専用鯖RH9 apache2.0.40 PHP4.2.2です
前任者が作ったサイトがあるんですが
HTMLスキンファイルをPHPで読み込ませ、index.phpに表示させるように
なってるんですが、何も表示されない(白紙=読み込まない)ので
困っています。
従来はちゃんと動いていたのですがphp.iniの設定(memory_limit=32M)
とpostgres.confを変更しpostgresとapacheを再起動したところ
上記症状になってしまいました。
該当のPHPエラーログは Allowed memory size of 16 bytes exhausted (tried to allocate 84 bytes) in Unknown on line 0
となっており、該当ホームディレクトリには.htaccessで
DirectoryIndex index.html index.php
php_flag log_errors On
#php_flag display_errors Off
php_value error_log "/home/sites/site1/web/php_logs/error_log.txt"
#php_value memory_limit "16M"
AddDefaultCharset EUC-JP
#AddType application/x-httpd-php .htm
memory_value)
と記述してあります。どなたか解決の糸口をご教示くださいませんでしょうか。何卒よろしくお願いします。
011190
2005/11/02(水) 01:24:27ID:???たびたびスマソ
「ワザとコメント」のままだとsession_id自体が引き渡されないね。
つまり受け取る側はsession_nameとURLの$nameが一致してないと
セッションの引き継ぎは行われないってことなんだね。
0112nobodyさん
2005/11/02(水) 01:29:04ID:???いい加減ウザいんだけど・・・。
てか、ちょっと考えればわかるだろ。
1.phpにてsession_name()でセッション名を定義しても、それが有効なのはスクリプト内、
つまり 1.php 実行中のみ。
2.phpにとってみれば、いきなり mysessionid = hogehoge とか渡されても、
これが「セッションIDを引き渡している」と分かるわけがない。
2.php でセッション名を定義していなければ、セッション名はデフォルトの"PHPSESSID"になる。
(※php.ini や .htaccess で定義していない場合)
> echo "<a href=\"2.php?{$name}={$id}\">next</a>"
> じつは2.phpでは$nameの部分は全く無視している(見ていない)?
ヒント: echo $_GET['mysessionid'];
0113nobodyさん
2005/11/02(水) 01:35:17ID:???くだらんスレもフカーツしたしそちらに帰りまつ
。・゚・(ノД`)・゚・。
0114nobodyさん
2005/11/02(水) 01:40:13ID:???くだらねぇ。
memory_limitの設定間違えて16byteに設定してしまって、メモリが足りないって怒られてるだけだろ。
英語がわからないなら辞書引けボケ
次からはくだしつで質問しろ。
0115nobodyさん
2005/11/02(水) 01:45:56ID:???0118105
2005/11/02(水) 08:37:47ID:k7ixpa6eありがとうございます。
> ImageMagickで日本語は無理じゃない?
日本語が含まれている文字が、表示されるのに日本語のみが表示できないのが不思議で…
やっぱり無理なんでしょうか?
> GDで元になる画像作って、必要ならImageMagickで加工するってのがいいのでは?
一応こちらの方向でも進行しています。
0119nobodyさん
2005/11/02(水) 10:03:45ID:???0121nobodyさん
2005/11/02(水) 13:59:03ID:???カウンタは上の方にあるので、カウンタを超えた行から読み込みたいのです。
0122nobodyさん
2005/11/02(水) 14:12:51ID:VM69hIe2具体的に言うと、どんな不具合?
$_GLOBALSが上書きされる??
http://www.hardened-php.net/index.76.html
0124nobodyさん
2005/11/02(水) 15:33:17ID:???とあるページのカウンタの仕様による。
ちなみにPHPでかかれているページについては、PHPで特別な処理をしていない限り、
HTTPでrange指定しても最初から全部処理して全部かえすぞ。
0126nobodyさん
2005/11/02(水) 15:55:28ID:???理由かな。どうやらカウンタの回り具合で訪問者をチェックしてるみたいなので、
回さずに見れる方法はないかなーと思いまして。
>>124
ソースを見たら<img src="counter?fafafa:ffc34c">とありました。
cgiに渡すもんじゃないのか・・・
0127nobodyさん
2005/11/02(水) 15:56:14ID:???これの本質は
GLOBALSを使ってる時は、どこで上書きされるか分からんから気をつけろ!
って所じゃないの?
以前のバージョンでは外からGLOBALSを上書きする方法もあるから、
ここで示されてるPEARの仕組みと組み合わせると、任意の関数を呼ばれる事になる。
ちなみに、外からGLOBALSを上書きできるのは、4.3.10より前か
4.4.1より前、それ以降は既に修正済みのようです。
0128nobodyさん
2005/11/02(水) 16:08:37ID:???とりあえずPHP5.0.4での簡単な例。php.iniでregister_globals = Onにしないと発生しない。
今時、register_globals = Onにしているのもどうかと思うが、レンサバなんかだと気軽にOffにはできないのかな。
[test.html]
<form action="test.php" method="post" enctype="multipart/form-data">
<input type="file" name="GLOBALS">
<input type="submit" value="submit">
</form>
[test.php]
<?php
print_r($GLOBALS);
?>
0129nobodyさん
2005/11/02(水) 16:28:35ID:???インジェクションの仕方が分からん。上書きはできないんじゃないの
0130nobodyさん
2005/11/02(水) 16:38:58ID:???0133nobodyさん
2005/11/02(水) 18:45:29ID:???配列の要素にヒアドキュメントを使うことはできますでしょうか?
$array = array(
'key1' => 'value1',
'key2' => <<<EOV
value2
EOV;
);
としたところ、
PHP Parse error: parse error, unexpected ';', expecting ')'
と怒られてしまいました。
文法的にNGなんすかね…
宜しくお願いします。
0136nobodyさん
2005/11/02(水) 19:44:21ID:???$regex = '[0-9]';
preg_match( '/^($regex)+$/o', $str );
がうまく動いてくれません。
みなさんは正規表現に複数の変数を含めるときどうしてますか?
0137nobodyさん
2005/11/02(水) 19:54:36ID:S6YoA3Rv正規表現に変数なんてつかったことないけど、
「.」で連結してみてもダメ?
preg_match( "/^(".$regex.")+$/o", $str );
0138nobodyさん
2005/11/02(水) 19:58:33ID:???正規表現がどうこうではなくて、PHPでの文字列の扱い(' と " の違い)を
勉強しなおした方がいいのでは?
0139nobodyさん
2005/11/02(水) 20:36:08ID:???シングルクォートで囲むと変数の内容に置き換わらない。
って、なんでいえないのかなあ。
呆れるわ
0140nobodyさん
2005/11/02(水) 20:46:08ID:???バージョンUPすると現行のアプリが動作しない可能性大ですので十分お気をつけて。
実際にはどの部分なのかな?
後気になるのが・・・
実際にアップデートした時に影響がどのくらい影響がでるのかが気になる・・・
対応しなきゃならないんだが・・・$GLOBALS使ってる箇所は全部直せってコトなんか・・・
そこが言及されてなくて今調べてる・・・orz
0141nobodyさん
2005/11/03(木) 01:57:40ID:???×変数→○定数
0142nobodyさん
2005/11/03(木) 02:53:13ID:???ついでに空の変数を、foreachで回そうとするとエラーが出るようになる。
これのせいで4.3.11のパッチあてたの使ってる。
つか今回の問題騒ぎすぎじゃないか。
彼らが思っている程PEARは普及してないし
register_globalsはoffになっているのではないだろうか。
0143nobodyさん
2005/11/03(木) 04:47:39ID:???それらの中には古いPHPが稼動していたり、
スクリプトを書き換える事ができずにregister_globalsがonのままだったり・・・
$GLOBALSはよく使うけど、使わない方がいいのかな?
でも、globalで似たような問題が出てこないとも限らないし、
かと言って関数実行時に必要な変数を全て渡すのもナンセンスな気がするし
0144nobodyさん
2005/11/03(木) 08:23:01ID:???誰か知っている方ご教授お願いします・・・
0145nobodyさん
2005/11/03(木) 09:39:22ID:???パッチはPHP本体のソースコード(C言語で書かれている)に対して当てるものなので、
PHPのソースコード(phpの本家サイトでの表記を使うと「Complete Source Code」)をダウンロードし、
それに対してpatchコマンド(Windowsにもあるのか?)か
パッチファイルの中身を参考にしながら手動で書き換えて、それをコンパイル・リンクすればおk。
んでも、コンパイルする環境は整っているのかい?
参照 ttp://www.php.net/manual/ja/install.windows.building.php
0146nobodyさん
2005/11/03(木) 15:05:23ID:xJeFN8dMclass A {
public static function factory() {
return new <CLASSNAME>();
}
}
class B extends A {
:
}
B::factory()という呼び出し方をした時に<CLASSNAME>と表記した部分がBになるようにする良い方法はありますか?
今のところA::factory("B");のように引数にクラス名の文字列を渡すしか思い浮かびません。
(これだと生成したオブジェクトに対して、if ($obj instanceof A) のようなチェックなど、余分なものが必要です)
B::factory()で何とかならないものでしょうか?
0147nobodyさん
2005/11/03(木) 17:54:47ID:???限りなくバグっぽいけど修正されない
サブクラスにクラス名を返すインターフェイスを強要してもいいけど
ファクトリなんだからきっちりオーバーライドするべきじゃないの
0148nobodyさん
2005/11/03(木) 17:59:24ID:???get_class($this)に相当する別の定数は欲しいなあ
0149nobodyさん
2005/11/03(木) 18:39:09ID:???お前らに頼ってたらいつになっても上達しない。
自分でやるから用はねーよ!!!
0150nobodyさん
2005/11/03(木) 20:25:52ID:???0152nobodyさん
2005/11/03(木) 23:51:31ID:???届いたメールを表示させることは可能ですか?
0154nobodyさん
2005/11/04(金) 01:01:56ID:???危ない。FreeBSDだが、まず一部のrequireが利かなくなったがinclude_pathで全て指定
すると利くようになった。しかし子プロセスがexit signal Bus error (10)で落ちる。
extensionからzlib.soを外すと落ちなくなるが、is_dirが問答無用でfalseを返すようになる
などなど。
ところがWin32版PHP4.4.1では同じアプリケーションが、全く変更しないでも、問題なく
動作してしまう。
0155136
2005/11/04(金) 12:10:20ID:???うわーすっごいボンミス。。。
ダブルクオートしたら動きました。。。
くだらない質問に答えてもらってありがとうございました。
ひとつ疑問なんですが、先に変数を展開してくれるんですね。
/^$regex+$/
/^{$regex}+$/
でも同じ動きしたので。
0156nobodyさん
2005/11/04(金) 12:33:17ID:???""の中の$変数を解釈(展開)するのが渡された関数ではなく、
phpのパーサであることを考えれば当然の動作では?
0157nobodyさん
2005/11/04(金) 12:50:23ID:???と揚げ足をとってみるテスト。
0159nobodyさん
2005/11/04(金) 15:04:55ID:???0160nobodyさん
2005/11/04(金) 16:45:40ID:???0161nobodyさん
2005/11/04(金) 16:51:13ID:???レクサ○ ← ス が入る
0162nobodyさん
2005/11/04(金) 16:54:04ID:???0163nobodyさん
2005/11/04(金) 21:35:57ID:Q83NQbMF0164nobodyさん
2005/11/05(土) 00:08:24ID:w/1ugKYJページ毎のアクセスランキングを設置したいのですが何処かにPHPカウンターの配布とかありますか?
1から勉強しなおさないと出来ませんでしょうか・・・PHP全く知らないです(マニュアル読みましたけどまだ半分位も理解できてないですし
ググってもそれらしいものが見当たりませんでした、鯖の仕様はPHP4のsafemodeらしいです
0165nobodyさん
2005/11/05(土) 00:19:53ID:???0166nobodyさん
2005/11/05(土) 00:22:11ID:???// ̄~`i ゝ `l |
/ / ,______ ,_____ ________ | | ____ TM
| | ___ // ̄ヽヽ // ̄ヽヽ (( ̄)) | | // ̄_>>
\ヽ、 |l | | | | | | | | ``( (. .| | | | ~~
`、二===-' ` ===' ' ` ===' ' // ̄ヽヽ |__ゝ ヽ二=''
ヽヽ___// 日本
______________ __
| | |検索|←をクリック!!
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄
〇ウェブ全体 ◎日本語のページ
0167164
2005/11/05(土) 00:28:06ID:EXt1uRpt有難う御座います
ググり続けてきます
0169nobodyさん
2005/11/05(土) 01:44:21ID:???ウェブ イメージ グループ ディレクトリ
______________ _____
|トンネル | |Google検索| 検索オプション
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ 表示設定
◎ウェブ全体から検索 〇日本語のページを検索
トンネルぐぐってぐぐって〜
0170nobodyさん
2005/11/05(土) 02:49:09ID:???(・∀・)ノ~~~ バイバーイ♪
0171nobodyさん
2005/11/05(土) 06:11:01ID:???0172nobodyさん
2005/11/05(土) 08:48:34ID:???0173nobodyさん
2005/11/05(土) 12:00:25ID:???高 テ|:::::::::::::::::::::::::::::::::::
け .ン |ーノノーヽ⌒ヽ:::
| シ|ノ ノ ノ ノ:::
. じ ョ| ; ;;;;;;;/ヽヽ::
ゃ ン| ;; ;;|::::
ん | :::/⌒ヽ ;;; |:::::
| ;;/ O ヽ;; |::::::
/ υ '''';;;;ー´ |:::::
_ _ノ:: |::::::
::::::V:::::::::::: ヾ |:::::::::
:::::::::::::::: ;;,, ,,, ) i |:: |
:::::::::::::::...... し |::/
_____ .|
|ー――――| /
|_____| /
,,,,,,,,,,,,,,,,,,,,, /
\ /
\____/
0175nobodyさん
2005/11/05(土) 16:21:46ID:???だけ生存期間を短くしたいのですが、
どうすればいいのでしょうか
誰かお願いします
0177nobodyさん
2005/11/05(土) 18:25:59ID:???1.メールアドレスを入力して送信
2.メールにURLが表示
3.URLをクリックするとアカウント登録完了
としたいのですが、URLを
***.php?[メールアドレス][日時][アドレスと日時のハッシュコード]
という風にしてハッシュの整合性をチェックして
アカウント作成、という風にしたら
何か問題があると思いますか?
ハッシュが解読されない限り大丈夫だとは思うんですが、何か心配です
0178nobodyさん
2005/11/05(土) 18:26:47ID:???0179nobodyさん
2005/11/05(土) 18:36:03ID:???0180nobodyさん
2005/11/05(土) 18:48:45ID:???どっちかを見分ける必要がありますよね
鍵付きのハッシュで鍵を長くしても駄目でしょうか
0181nobodyさん
2005/11/05(土) 19:12:30ID:???1.メールアドレスを入力させる
2.ユーザはメールアドレスを入力しPOSTする
3.システムがメールアドレスからハッシュを取得する
4.システムはハッシュ値と日付をどこかに保存する(DBとか)
5.システムが
http://example.com/hoge.php?[ハッシュ]
を含んだメールを入力されたアドレスに送信する。
6.ユーザが上記のアドレスにアクセスする
7.システムは保存されたハッシュを検索する
以下略
0182nobodyさん
2005/11/05(土) 19:29:17ID:???0183nobodyさん
2005/11/05(土) 19:43:57ID:???なるほど。
177さんではありませんが勉強になります。
0184nobodyさん
2005/11/05(土) 22:10:21ID:???GLOBALSに外部ユーザーからの値を受け取らないように組んでればOK
ってことだよね
若干騒ぎすぎな気がする。
0185nobodyさん
2005/11/05(土) 22:20:31ID:???0187nobodyさん
2005/11/05(土) 22:58:28ID:???0188nobodyさん
2005/11/05(土) 23:09:30ID:???0189nobodyさん
2005/11/05(土) 23:17:36ID:???0191nobodyさん
2005/11/05(土) 23:20:54ID:???0194nobodyさん
2005/11/06(日) 02:19:18ID:???サーバ上で呼び出されたのとを
区別する方法ってありませんでしょうか?
0196nobodyさん
2005/11/06(日) 02:44:47ID:???$argv は php.ini の register_argc_argv が On なら CLI じゃなくてもありますよ。(CLI では強制 On)
CLI + Apache モジュールなら php_sapi_name() 関数か PHP_SAPI 定数で判別できますね。
CGI としてインストールされてるなら判定用の環境変数を仕込むのがいいんじゃないかと。
0198nobodyさん
2005/11/06(日) 15:31:18ID:???メール本文はどこで定義していますか?
メール本文に受け付けたクエリを載せるとしたら
やっぱりそのプログラム内部に .= とか ヒアドキュメントとかで
書くしかないのかな?
メール本文だけ外部ファイルにして、
requireしようかと思ったけどなんか違う。
外部ファイルをevalしようかと思ったけどこれもまたなんか違う。
やっぱり本文に書くのみ!?
別変数で定義しておいて、
あとから参照しようとしても上と同じことになるし…
Perl使ってたときは、外部ファイルにして
クエリ載せるところは正規表現で全部置換してたんだけどなぁ
0200nobodyさん
2005/11/06(日) 15:42:46ID:???>クエリ載せるところは正規表現で全部置換してたんだけどなぁ
じゃあそすればいいじゃない。
つうか、別に正規表現使わなくてもできるよね。
0201nobodyさん
2005/11/06(日) 15:43:46ID:???どうしっくり来ないのか判らないんだけど、漏れは外部ファイルに置いて
文字列に取り込んでる。
$message = file_get_contents('mailtemplate.txt');
■ このスレッドは過去ログ倉庫に格納されています