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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/10/25(火) 06:50:06ID:Q4oGlTH3
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辺り
02672652005/11/09(水) 03:17:02ID:???
265をちょと修正
htmlpath(getcwd()) getcwd()は不要だた。"./"でおk

それと
>/usr/local/public_html/
>の部分が一般的には違うので、その環境に依存する違いをどう吸収させようか
が気になったので一言
ブラウザからはDocumentRoot以上は見えないのでブラウザにとって / が一番上=DocumentRoot
ブラウザの/pic/hoge.jpg = サーバの/usr/local/public_html/pic/hoge.jpgだから
DocumentRoot以下を同じ構成にしておけば問題ない。
02682652005/11/09(水) 03:20:06ID:???
>>266
/usr/local/public_html/が本番、テスト機で違うからということと
画像はサーバの絶対パスがわかってるから問題ないんじゃね?
0269nobodyさん2005/11/09(水) 03:27:14ID:???
ま、確かに>>257を見る限りDocumentRootを理解できてなさそうではあるな
つか俺この質問どこかで見たことあるぞ?
0270nobodyさん2005/11/09(水) 03:29:57ID:???
>>268
つか画像をphpで処理するわけでもないのに絶対パス指定する意味が全然分らん
>>257が激しく勘違いしてるとしか思えない
0271nobodyさん2005/11/09(水) 03:44:14ID:???
public_html以上のパスを変えれば表示されるってんなら
DocumentRoot以下の構造は同じってことだろ
なんでこんな面倒くさい話になってるの?
02722652005/11/09(水) 04:18:19ID:???
よく読み返したら258でそのまんま回答でてるし

<丶`∀´><asahi-netとキムチは寄生虫ニダ
02732572005/11/09(水) 14:16:28ID:???
>>262
> 相対で書けばいいじゃないか
> アプローチが間違ってない?

PHPのスクリプトとjpegファイルの場所が全く違うものでして
その違いを吸収させるために楽な絶対パスを使ってきました。
でも最終的にブラウザに表示するには相対パスでやりくり
したほうが楽そうですね。

相対パスで記述できないか見直してみます。
0274nobodyさん2005/11/09(水) 14:32:37ID:???
>>257はまだ何か勘違いをしているような気がするなぁ。
例えば
http://hoge1.com/img/image.jpg も
http://hoge2.com/img/image.jpg も
各鯖内のhtmlで<img src="/img/image.jpg">と記述すれば表示できる。
DocumentRoot以下を絶対パスで表記してるからね。

ローカルの絶対パスなんて使う余地すらないんだけど、
phpの中で加工でもしてるの?
02752572005/11/09(水) 15:02:34ID:???
>>274
> ローカルの絶対パスなんて使う余地すらないんだけど、
> phpの中で加工でもしてるの?

はい、PHPの中でいじってるからです。
各ファイルのパスを取得する変数が返してくる値が大概
絶対パスなものでして・・・
0276nobodyさん2005/11/09(水) 15:08:34ID:???
>>275
> 各ファイルのパスを取得する変数が返してくる値が大概絶対パス

ここの時点で設計がマズイと思われ
0277nobodyさん2005/11/09(水) 16:31:10ID:5u1IiLDs
PHPを最近勉強はじめました。
しょっちゅうコードを間違えてエラーばっかりでハァハァしてるんですが、
そんな私に何かアドバイスください お願いします。
02782572005/11/09(水) 16:36:09ID:???
もう少し詳細に各ファイルの配置を記載しますと、

/usr/local/public_html/nikki1/index.php       本文
/usr/local/public_html/nikki1/pic/sample1.jpg  写真
/usr/local/public_html/script/image.php     写真を装飾して表示させるプログラム

こんな感じです。本文から写真のリンクをクリックすると写真に各種装飾を施して
表示させます。そのプログラムがimage.phpなんですがそいつに写真を渡すに際し

../image.php?file=/nikki1/pic/sample1.jpg

のようにドキュメントルートから記述して渡せば何の問題もありません。
ただここでは
/nikki1/pic/
という比較的階層数の少ない例にしましたが、もっと込み入って複雑かつ長ったらしい
名前の階層になったり、表示させる写真が一枚ではなく大量の写真を掲載するとき
などドキュメントルートから指定するのは大変煩わしいです。それに何らかの事情で
nikki1
の名前を変えたりしたら写真のリンクは全て書き直さなければならなくなりますよね。

そこでindex.phpと写真(sample1.jpg)の相対パスは変わらない点に注目してindex.phpでは
../script/image.php?file=./pic/sample1.jpg
のように相対パスのまま写真を指定できないものか、というのが出発点です。
0279nobodyさん2005/11/09(水) 16:52:22ID:???
>>278
単純に

$path = "/nikki1/pic/";

と記述して、ファイル名の前に$pathを書けばいいだけでは?
0280nobodyさん2005/11/09(水) 16:56:27ID:???
>>278
だとしたらおまい>>257の質問自体がおかしいぞ。
アレだと「phpで生成したhtmlで、タグにローカルの絶対パス指定しても
表示されないのだがどうすれば」としか読めない。
画像そのものをphp通したもの表示するなら根本的に話が変わってくる。

で、それなら<img src="../script/image.php?file=./pic/sample1.jpg">にしておいて

<?php define('PATH_DOCROOT','/usr/local/public_html(←ここは鯖依存)'); ?>

とか書いたphpを最初にincludeして使えよ。他は共有できる。
02812572005/11/09(水) 17:17:36ID:???
>>279
そうですね・・・、その場合ですと

image.php?file=<?php echo $path ?>sample1.jpg

とかなるわけですね。

>>280
> /usr/local/public_html(←ここは鯖依存)

この部分は($_SERVER['DOCUMENT_ROOT'])を使えばうまく鯖依存を消せるかもしれませんね。
0282nobodyさん2005/11/09(水) 17:31:18ID:???
>>281
普通は
image.php?file=sample1.jpg
みたいにファイル名だけ送るけどね
ファイルへのパスは共通の設定ファイルに書いてそれぞれのスクリプトでincludeするとか
0283nobodyさん2005/11/09(水) 17:40:29ID:???
なんだか頑固な人だな
配布しようとしてるなら最初から見直した方がいいよ?
0284nobodyさん2005/11/09(水) 18:19:59ID:???
あの…よろしければ。
入門書のサンプルプログラムにあったのですが
<form action="hogehoge"> でhogehogeは.cgiや.phpなどになるのは分かります。
その本では<form action="<?=$_SERVER["PHP_SELF"]?>" 〜 >になってました
"<?="と"?>"の部分は何故必要なのでしょうか?
それと別のサンプルではhogehogeのところが"<?=$_SERVER["PHP_SELF"]?key=hoge>"というのもありました。
確かにそれでは変数で"$key"を使っているのですがこの記述もどう理解すればいいのか分かりません。
"?"は何かのタグやコマンドなどの簡略形なのかもしれないとは思うのですが…。
どなたかお教えくださいませm(_ _)m
0285nobodyさん2005/11/09(水) 18:22:16ID:???
>>284
もう一度入門書を最初から読み直してみな
0286>>2842005/11/09(水) 18:27:40ID:???
優しく言うと
<?= hogehoge ?>
は <?php echo hogehoge ?>の略
$_SERVER["PHP_SELF"] は自PHPスクリプトのURLを格納している変数

これでわからないならもう一度はじめから入門書読みな
0287nobodyさん2005/11/09(水) 18:28:00ID:???
ユーザが手作業で書き換えたっていいじゃない
だって手を使うと頭がよくなるっていうもの
0288nobodyさん2005/11/09(水) 18:31:35ID:???
<?php
<?=
<?
0289nobodyさん2005/11/09(水) 20:16:19ID:???
オマイラ、
<?php
以外はshort_open_tagなんかの設定環境によって使えない場合があることも言っとけ。
0290nobodyさん2005/11/09(水) 20:17:46ID:???
<?php を必ず使うようにすればおk
02912842005/11/09(水) 21:09:20ID:???
>>285-290
大変ありがとうございますm(_ _)m
やっぱりBASICでPRINTを"?"と略したりするのと同じようなものだったのですね。
ぶっちゃけ使っている入門書はソフトバンクの"PHPによるWEBスーパーアプリケーション"なんですが
いきなりこの書式を使っている部分がありましたので面食らいました。
ところで"<?=$_SERVER["PHP_SELF"]?key=hoge>"は"<?=$_SERVER["PHP_SELF"];key=hoge;?>"と書くべきだと思うのですが
この部分はどうなっているのでしょうか…
0292nobodyさん2005/11/09(水) 21:42:37ID:???
>>291
それがやろうとしているのは、
「$_SERVER["PHP_SELF"] と 文字列"?key=hoge" を連結したものを出力」 でそ?
文字列部分は、URI表記でいう所のquery。 $_GETで取り出すやつ。
0293nobodyさん2005/11/09(水) 22:13:05ID:???
>>291
本を読んでるのに,その本のことをここで聞かないといけないなんて・・・
その本は燃やしてしまったほうがいいかもしれないね.

コードの実行環境はないの?
いろいろ試しながらのほうがいいかと.PHPのマニュアルも参照しつつ.
0294nobodyさん2005/11/09(水) 22:42:36ID:Rf4f8pCB
404エラーページをPHPで自作しています。
リファラーを記録するスクリプトを作ろうと思ってGoogleで検索したのですがどうしても
解決しませんでした。

ユーザが、404.phpにアクセスした時のリファラーを「referer.dat」に
記録したいのです。

知ってる方いましたらお願いします。
途中で挫折:(http://www.geocities.jp/nullpo_de_ga/source.txt )
02952942005/11/09(水) 23:44:37ID:Rf4f8pCB
すみません、自己解決しました。
0296nobodyさん2005/11/09(水) 23:59:37ID:???
ハァ?
0297nobodyさん2005/11/10(木) 00:53:20ID:???
たった2分で自己解決か・・・。
0298nobodyさん2005/11/10(木) 08:12:19ID:Vd5L+S6A
質問場所がちょっと微妙なんですけど、
フォームで同じ名前を指定してsubmitした後に配列にいれてます。

-------
<input type="checkbox" name="hoge[]" value="hogehoge1">
<input type="checkbox" name="hoge[]" value="hogehoge2">
<input type="checkbox" name="hoge[]" value="hogehoge3">
:
-------
 for($i=0;$i<count($_POST['hoge']);$i++){
  $temphoge =$_POST['hoge'][$i];
  ・・・処理
 }
-------
としてたんですけど、チェックボックスをJavaScriptで全部チェックしようと
思った場合、
<input type="button" name="allchk" onclick="document.form1.hoge[1].checked=true;" value="全てにチェック"><br>
<input type="button" name="allchk" onclick="document.form1.hoge[].checked=true;" value="全てにチェック"><br>
<input type="button" name="allchk" onclick="document.form1.hoge.checked=true;" value="全てにチェック"><br>
といずれにしてもエラーになってしまいます。
PHPで、POSTで受け取ったものを配列に入れる方法って他にありませんか?
また、両方の処理を実現させるいい方法があれば教えていただけませんでしょうか?
0299nobodyさん2005/11/10(木) 09:10:43ID:???
>>298
onclickの中でループで一つ一つチェックしたら?
0300nobodyさん2005/11/10(木) 09:19:39ID:???
document.form1["hoge[]"][i].checked // iは0から2
でアクセスできる
0301教えてください2005/11/10(木) 09:49:12ID:GWhi70M+
PHPで他のHPを自分のHPの一部(TOPなど)に表示させるにはどのようにして
やればいいのでしょうか?

HTMLではフレームを使えば取得できるのですが・・・。

PHPではどのように書けば取得できるか教えてください。
初心者ですいません。検索してもうまくヒットできませんでした
0302nobodyさん2005/11/10(木) 09:53:52ID:???
>>301
file_get_contents("http://〜")てこと?
03033012005/11/10(木) 09:56:34ID:GWhi70M+
レスありがとうございます。
>>302さんそうです! それで取得したいんですが
HTMLの表示させる部分にはどのようなタグを記述すればいいんでしょうか?
0304nobodyさん2005/11/10(木) 09:57:59ID:???
>>303
echoで丸ごと表示できるけど、そんなんでいいの?
03053012005/11/10(木) 10:01:44ID:GWhi70M+
具体的にしたい例を申し上げます

index.html(これがメインのHPだとします)
kousin.html(こちらが更新履歴を出力するHPです)

このkousin.htmlをindex.htmlに表示させたいんです。
kousin.htmlを更新すればindex.htmlに反映がされるので
phpでこれをどうやればできるのかを教えて頂きたいです。
0306nobodyさん2005/11/10(木) 10:01:45ID:???
>>301
あれか、最近流行のフィッシング詐欺。
0307nobodyさん2005/11/10(木) 10:02:00ID:???
>>301
つーか、フレームでそのまま表示させればいいやん。
0308nobodyさん2005/11/10(木) 10:03:10ID:???
>>305
includeする。
ただし、httpもできる設定にする。
03093012005/11/10(木) 10:06:27ID:GWhi70M+
>>308
ありがとうございます。そちらの方を勉強させてもらいます。
アドバイスくれてありがとうございます!

>>307
嫌です;;かっこわるいのでw

>>306
悪い人ですね。。。
0310nobodyさん2005/11/10(木) 10:09:09ID:???
>>309
悪い事たくらんでるのはお前だろ
03113012005/11/10(木) 10:09:16ID:GWhi70M+
<!--#include file="ファイル名" -->
ssiですね!
こんな簡単な方法があったんですね。
03123012005/11/10(木) 10:11:13ID:GWhi70M+
>>310
自分はMMOのサイト作成で使おうと思ってます。
MMOの公式サイトの更新やお知らせを自分のHPで表示できるようにも
しようと考えてました。(自分のサイトの更新履歴もです)
0313nobodyさん2005/11/10(木) 10:18:32ID:???
>>311
PHPにSSI混ぜるのはお勧めしないな。
03143012005/11/10(木) 10:31:13ID:GWhi70M+
わかりました。諦めたほうがいいんですね;;
でもssiで取得する方法などを教えてくれてありがとうございました。
興味がわいたので勉強してきます。
0315nobodyさん2005/11/10(木) 10:47:22ID:???
ん?308のincludeってPHPのincludeじゃないの?
0316nobodyさん2005/11/10(木) 11:21:50ID:???
つかその表示方法は問題ないのか?
他人のコンテンツを自分のコンテンツと混同させるような
表示方法になると思うんだが・・・
03173012005/11/10(木) 11:34:56ID:GWhi70M+
MMOのサイトに連絡済みです。許可もらってますよ。
0318nobodyさん2005/11/10(木) 12:36:38ID:???
>>315
もちろんそう。
0319nobodyさん2005/11/10(木) 12:44:07ID:???
XREAのレンタル鯖を使用していて質問があります。
セーフモードで外部ファイルのインクルードってできないのでしょうか?
セーフモードがインクルード関連のメソッドの使用を禁止してるのは解りますが
何か解決策はないものでしょうか・・・外部ファイル指定できないのは痛杉。


ためしに <? include( "echo.php" ); ?> としてみた結果は以下の通りです。

Warning: main(): open_basedir restriction in effect. File(/php/bin/echo.php) is not within the allowed path(s): (.:/virtual:/tmp:/usr/local/lib/php) in /virtual/hogehoge/public_html/index.php on line 2
Warning: main(/php/bin/echo.php): failed to open stream: Operation not permitted in /virtual/hogehoge/public_html/index.php on line 2
Warning: main(): Failed opening '/php/bin/echo.php' for inclusion (include_path='.:/usr/local/lib/php') in /virtual/hogehoge/public_html/index.php on line 2

phpinfo() で解るセーフモード関連の値は以下の通りです。

Configure Command       --enable-safe-mode'
safe_mode           On
safe_mode_exec_dir      /usr/local/php/bin
safe_mode_gid         Off
safe_mode_include_dir     /usr/local/lib/php
safe_mode_allowed_env_vars  PHP_
safe_mode_protected_env_vars LD_LIBRARY_PATH
PHP_PREFIX          /usr/local
LD_LIBRARY_PATH       :/usr/local/mysql/lib/mysql:/usr/local/pgsql/lib
03203012005/11/10(木) 13:07:13ID:???
自分もxreaです;;
できませんでした。。。
だからどっかに移動しないとだめです。
ドメインと有料プランなのに

PHPのincludeで自サイトのURLを指定して取り込みされることは非常に負荷が掛かりますので、極力おやめください。
場合よっては制限させていただくことがございます。
http://72.14.203.104/custom?q=cache:Ju5uWRscdtkJ:sb.xrea.com/showthread.php%3Ft%3D10180+include&hl=ja&ie=UTF-8&inlang=ja

ここに書いてましたよ
0321nobodyさん2005/11/10(木) 13:15:52ID:???
>>302-303
を見ると、なんも分かってないよな。コイツ。
結局、成りすましサイト作ろうとしてるようにしか見えない。

<?php
echo file_get_contents("http://〜");
?>
<!-- 以下 自サイトのHTML -->
03223012005/11/10(木) 13:23:43ID:???
321
神!ありがとん!
0323nobodyさん2005/11/10(木) 13:37:56ID:???
>>320
ん?xreaってPHPの使用に何か制限欠けてるんだっけ?
0324nobodyさん2005/11/10(木) 13:38:46ID:???
>>301
既に、>>301において自分で解法を書いているのに何をウダウダ…

>HTMLではフレームを使えば取得できるのですが・・・。

PHPでフレーム下記だしゃいいじゃん。
ページ内にってんならiframe。
いずれにしてもHTMLのタグでこと足りるだそ。
03253012005/11/10(木) 15:12:51ID:???
>>324
フレームだとソース見られて成りすましがばれるからだめなんです
0326nobodyさん2005/11/10(木) 15:26:59ID:???
>>299-300
ありがとうございました。>>300さんの方法でできましたー
0327nobodyさん2005/11/10(木) 15:49:15ID:???
>>325
え?成りすましがばれないようにやりたいの?
たとえサイトに溶け込ませるような表示をするにしても、引用元のバナーかリンクくらい貼っときなよ。
他人のものを自分のものであるかのように使うのはイクナイ

ちなみに方針としては、file_get_contentsとかで取得したものを正規表現で必要な部分だけ抜き出してechoで表示、ってのがおそらくチミのやりたいことにマッチする希ガス。
あとは、一度取得した情報はなるべくキャッシュしておいてHEADメソッドで更新チェック+再取得するかどうか分けたりする等の効率を図るとか(そのほうが相手側のサーバの負担もちょっと減る)。
まあ徐々にスキルアップしていってくれ。
03283012005/11/10(木) 15:51:57ID:GWhi70M+
>>325は、偽者ですIDだしておきます。
0329301 ◆F4BkeOen4w 2005/11/10(木) 15:53:05ID:GWhi70M+
巡回してなかったら本当ひどいことする人いますね。
人として最低ですよ。罰があたるでしょう。
0330nobodyさん2005/11/10(木) 16:16:21ID:???
痛ッ!!痛いよ

つかおまいXREAスレとマルチだろ
0331nobodyさん2005/11/10(木) 16:49:18ID:???
厨発見!
0332nobodyさん2005/11/10(木) 18:56:59ID:???
うはww妙に伸びてると思ったら、痛いの湧いてたwww
0333nobodyさん2005/11/10(木) 20:09:24ID:???
>>319>>320
俺xreaだけど普通にできるよ?
つかエラーメッセージ見ると全然違うところのecho.phpを開けようとしてるっぽいんだけど。
<? include( "./echo.php" ); ?> でもダメ?
03343202005/11/10(木) 23:21:19ID:???
>>333
あ、構成が違ってました。
public_html
 ├ index.php
 └ php
    └ echo.php
こんな感じで、index.php から echo.php をincludeする時、
include("/php/echo.php");
としてもエラーになってしまいます。

今XREAで話題の
ttp://itpro.nikkeibp.co.jp/article/NEWS/20051102/223939/
ttp://pc8.2ch.net/test/read.cgi/hosting/1130539792/
この騒動が原因であると信じたい…
XREA有料申し込んで1ヶ月しかたってないけど(しかも1年契約)
解約して制限ユルユルのロリポにいこうかな
0335nobodyさん2005/11/10(木) 23:31:32ID:???
<?php include("./php/echo.php"); ?>
0336nobodyさん2005/11/11(金) 00:03:08ID:???
URLに文字列を渡しているんですが、

<a href="test.php?files=ソ連">リンク</a>

test.php側でURL経由でわたされた$filesを表示させると

print_r($_GET['files']);

結果は >> ソ\連

と、カタカナのソの字の後に\マークが入ってしまいます。
いろいろ試した結果、引き渡す文字数や内容には関係なく、
カタカナのソがあればその後に無条件で\マークが付与
されてしまうようです。

受け取り側のtest.phpで\マークを除去するようプログラムを
組めば回避は出来ますが、どこか腑に落ちません。なぜ渡した
文字のうち”ソ”の字だけ\マークがついてしまうのでしょうか?

※もしかしたらソの字以外にも\マークが付く文字があるのかも
  しれませんが試していないので何とも言えません。
0337nobodyさん2005/11/11(金) 00:06:55ID:???
>>335
(;゚,_ゝ゚)・・・何回くらい死ねばいいですか?
0338nobodyさん2005/11/11(金) 00:11:37ID:???
>>337
もっかいコピペしてやってみれ(・∀・)
0339nobodyさん2005/11/11(金) 00:15:22ID:???
>>336
それはロシアの陰謀です。
0340nobodyさん2005/11/11(金) 00:27:58ID:???
>>336
まず、URLに使って良い文字と使っちゃいけない文字がある。
どういう文字が使えるかは、「RFC3986」でググって調べてみそ。
で、そういう文字はrawurlencode()を使って、使って良い文字に変換するようにする。(URLエンコード)

次に、shift-jisで「ソ」という文字は2byte目に 0x5c (= \) が含まれる。
他にも、「表、十」あたりもそう。
0x5cは特殊な意味を持つので、GET・POST・COOKIEにそれが含まれる場合に
自動的にエスケープする仕組みがPHPに組み込まれている。
エスケープされた結果、特殊な意味を持つ\では無く、\という文字そのものを表すようになる。
" "の中で \ を使う時に、 "\"" てな感じにするのを思い出してもらえば分かり易いかと。
これは、マニュアルの php.iniのmagic_quotes_gpc あたりを参照。
03413362005/11/11(金) 00:42:14ID:???
>>340
php.iniのmagic_quotes_gpcをoffに変更することでソの字も問題なく
表示できるようになりました。助かりました、ありがとうございます。
0342nobodyさん2005/11/11(金) 01:29:15ID:???
分ってるのかな('A`)
0343nobodyさん2005/11/11(金) 01:34:37ID:???
>>342
「言ってる事は分からないけど、設定変更したら動きました!」だと思われ
0344nobodyさん2005/11/11(金) 02:25:24ID:???
結局>>320は>>335で解決したの?
xreaのせいじゃないってこと?
0345nobodyさん2005/11/11(金) 03:54:37ID:???
最近はくだ質の方がまともだな
0346nobodyさん2005/11/11(金) 05:46:54ID:???
そうか?どっちもどっちじゃね?w
0347nobodyさん2005/11/11(金) 09:39:02ID:???
>>340
> >>336
> " "の中で \ を使う時に、 "\"" てな感じにするのを思い出してもらえば分かり易いかと。

この部分なんか変じゃない?
03483412005/11/11(金) 13:49:18ID:???
こ、これだけじゃなんかまずいですかね(;^-^)?
0349nobodyさん2005/11/11(金) 13:56:37ID:???
>>348
何のための設定かしらべてごらんよ
0350nobodyさん2005/11/11(金) 14:04:19ID:???
>>347
"\"" じゃなくて "\\" だーね。
0351nobodyさん2005/11/11(金) 14:18:50ID:???
>>347 >>350
いや
" "の中で " を使う時
と言いたかったんだと思う
0352340,3502005/11/11(金) 15:42:16ID:???
>>351
布団をパタパタされたので急いでいた。
エスケープならなんでも良かった。
今は"\\"の方が良かったと後悔している。
0353nobodyさん2005/11/12(土) 18:23:07ID:???
URLにセッション名とセッションIDを埋めてページ間のデータのやりとりを
しているんだけどOperaだと問題なくセッションを共有できるのにFireFoxだと
うまく共有できない(セッションIDが変わっている)

両方のphpファイルではちゃんと先頭で
session_start();
しているしなにがいけないんだろう?

OperaとFireFoxでプログラムの組み方変えなきゃならないの?
03543532005/11/12(土) 19:29:46ID:???
徐々に状況が判明してきた。
PHPの設定パラメータ「session.use_trans_sid」が0に指定されていると想定し、

/* index.php */
session_start();
print "session_id = " . session_id();

<a href="session.php?<?=SID?>">リンクA</a>
<a href="no_session.php">リンクB</a>
/* index.php */


/* session.php */
session_start();
print "session_id = " . session_id();
/* session.php */


/* no_session.php */
session_start();
print "session_id = " . session_id();
/* no_session.php */

上記の3つのファイルを用意する。
index.phpにて「リンクA」をクリックすると表示されるセッションIDは同じである。(当然)
そのあとブラウザの戻るボタンを押しindex.phpに戻ってきてから次に「リンクB」を
クリックする。するとなぜかURLでセッションを引き渡してないにもかかわらず同じ
セッションIDが表示されるのである。

次に順番を変える。indexphpにて先に「リンクB」をクリックして(当然セッションIDは違う)、
それから「戻る」ボタンをおして戻ってきて、次に「リンクA」をクリックするとなぜかindex.php
で表示されたセッションIDと違うのである。URLでセッションを引き渡しているにもかかわらず。
0355nobodyさん2005/11/12(土) 19:30:37ID:???
バカはさっさと死ね
03563532005/11/12(土) 19:31:59ID:???
以上がOperaとFireFoxで生じた現象である。

そこで問題なんだが先に「リンクB」を押してしまったとしても、
ブラウザの戻るボタンを押してindex.phpに戻ってきてから「リンクA」をクリックしたとき、
セッションIDがindex.phpのそれと等しくするよう(セッションが引き継がれるよう)にする
方法は無いだろうか?
0357nobodyさん2005/11/12(土) 19:39:21ID:???
セッションIDなんて飾りです。エロイ人にはそれが分からんのです。
問題はデータが渡せているかいないかだべ。
03583532005/11/12(土) 19:44:43ID:???
エロイんですか、そうですか('A`)・・・
0359nobodyさん2005/11/12(土) 20:38:02ID:???
>>297

>>294,>>295どこが2分?
目が腐っちゃったのかな?
0360nobodyさん2005/11/12(土) 20:45:50ID:???
>>353
>するとなぜかURLでセッションを引き渡してないにもかかわらず同じ
>セッションIDが表示されるのである。

実はクッキーで渡してたりして
0361nobodyさん2005/11/12(土) 22:43:06ID:???
use_trans_sidを1にすりゃすむのに。
03623532005/11/13(日) 01:08:33ID:???
>>360
クッキーがオンのときでもURLでセッションを引き渡していなければ
引き渡されないようにする方法って無いんだっけ?

index.phpが表示されるたびにsession_idをrenewできればいいのかな?

>>361
レンタル鯖('A`)・・・
0363nobodyさん2005/11/13(日) 02:31:35ID:???
$str = "hogehogehogehoge";
foreach ($str as $ch) {
switch ($ch) {
case ...
}
}
のように、文字列を一文字ずつ処理したいのですが、どういうふうにしたら良いですか?
上記のように書くとInvalid argument supplied for foreach()と言われてしまいます。
03643632005/11/13(日) 02:33:28ID:AK9WWUo7
あ、ageなきゃいけなかったんですね。すみません。
0365nobodyさん2005/11/13(日) 02:39:31ID:???
>>363
アルファベットだけでいいのなら、$str[] で個々にアクセスできるから、for文を使うとか。
マルチバイトならmb_substr()をクルクル回す。
0366nobodyさん2005/11/13(日) 03:01:28ID:???
>>363
もしforeachが使いたいなら、str_split(PHP5)やpreg_splitなどで配列にしてしまう手もあるね。
マルチバイトの場合mb_splitでは一文字ずつに区切れないので365のようにmb_substr使うのが最善かな。
■ このスレッドは過去ログ倉庫に格納されています