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

【PHP】下らねぇ質問はここに書き込みやがれ 29

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/09/17(日) 04:26:39ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
  (逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
  (荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0151nobodyさん2006/09/19(火) 20:37:38ID:???
>>147
おれは左上端
0152nobodyさん2006/09/19(火) 20:48:26ID:???
おれは左官大臣Zx
0153nobodyさん2006/09/19(火) 20:57:21ID:???
>>150
あると思う
0154nobodyさん2006/09/19(火) 21:10:53ID:???
>>146
無いよ。ふつーだろ。
0155nobodyさん2006/09/19(火) 21:43:09ID:???
>>147
日本語キーボードならSHIFT+@
0156nobodyさん2006/09/19(火) 22:18:35ID:???
>>155
インドウズが再起動しました(><)
0157nobodyさん2006/09/19(火) 22:21:08ID:sKqysrv5
あるページにパスワードをかける場合、IDとpassの埋め込み型のphpファイルは
安全といえるのでしょうか?

また、htaccessを使わずにディレクトリごとロックすることは可能でしょうか?
たとえば・・・
public_html-----[abc]←このディレクトリ中のファイルへのアクセスを拒否するのは可能ですか?
0158nobodyさん2006/09/19(火) 22:27:11ID:???
>>149
ありがとうございます
0159nobodyさん2006/09/19(火) 22:59:26ID:???
>>157
>IDとpassの埋め込み型のphpファイルは安全といえるのでしょうか?
心配なら生Pass記述ではなく、cryptした値で比較すれば?

>htaccessを使わずにディレクトリごとロックすることは可能でしょうか?
httpd.confが弄れるなら可能。
0160nobodyさん2006/09/19(火) 23:25:08ID:???
>>157
まあ普通に使ってる限り、拡張子がphpのファイルはソースが見えることはありえないが、
設定ミスなどが怖いのなら、パスワードを書いたファイルはDocumentRoot外に置いて
includeすれば良い。
0161nobodyさん2006/09/19(火) 23:35:24ID:???
>>154
あんまり後者の書き方は見かけないんですが・・・
mysql書き始めて2年にもなろうというのに初めてみましたよ>後者の書き方
01621572006/09/19(火) 23:36:21ID:???
ありがとうございます。夕方からいろいろ調べてコード書いてみたんですが、
<<159さんや<<160さんみたいのは新しい発見です。

cryptで暗号化も考えたのですが、結局生のパスワードを書きますから
先輩方のアドバイスを参考にさせていただきまして、もうすこし調べてみます。
ありがとうございます。
0163nobodyさん2006/09/19(火) 23:43:31ID:???
>>161
お前がへたれなだけだから心配すんな
0164nobodyさん2006/09/19(火) 23:51:04ID:???
気づかないうちにxmlに書き出されたモロ三重コードたまに見るけどな〜
0165nobodyさん2006/09/20(水) 00:11:51ID:???
質問です。UML(クラス図)を描いたら、PHPのソースに落としてくれるエディタってありますか?
0166nobodyさん2006/09/20(水) 00:12:23ID:???
>>162
>cryptで暗号化も考えたのですが、結局生のパスワードを書きますから

なんで、暗号化するのに生のパスワードを書く必要があるの?
PHP内にはcryptで暗号化した文字列だけ書いておいて、
入力されたパスを同じcrypt化して比較すればいいじゃん。
0167nobodyさん2006/09/20(水) 00:15:56ID:???
PHPというか数学的な質問かもしれませんが、、
アクセス数に対し、可変する横棒グラフを作成しています。
例えば、1日(30)、2日(15)、3日(40) ※()内はアクセス数です。
とした場合、どういう風に構築するのが良いのでしょうか?
単純に<img src="bar.gif" width="<?=$access?>">とすると、横に伸びきるし。。

質問内容がまとまっていないかもしれませんが、ご教授いただければと思います。
0168nobodyさん2006/09/20(水) 00:27:02ID:???
>>167
アクセス1個分の長さの画像を用意してアクセス数分並べれば?
0169nobodyさん2006/09/20(水) 00:34:33ID:???
>>167
とりあえずメール欄は空白も何も無しが正解。努力は買うが。

仕様として、横バーの最大を固定にするか可変にするかでも変わる。
1日(30)、2日(15)、3日(40)のときで40のグラフが横幅いっぱいになるようにするなら
$acc = array(1 => 30, 2 => 15, 3=> 40); //アクセス数のリスト
$maxwidth = 400; //バーの横幅最大
$max = max($acc);
$rat = $maxwidth / $max;
?>
1日<img src="bar.gif" width="<?=$acc[1] * $rat?>"><br>
2日<img src="bar.gif" width="<?=$acc[2] * $rat?>"><br>
3日<img src="bar.gif" width="<?=$acc[3] * $rat?>"><br>
という感じだろう。

それに対して、アクセス数100のときに横幅いっぱいになるようにするなら
$acc = array(1 => 30, 2 => 15, 3=> 40); //アクセス数のリスト
$maxwidth = 400; //バーの横幅最大
$rat = $maxwidth / 100;
?>
1日<img src="bar.gif" width="<?=$acc[1] * $rat?>"><br>
2日<img src="bar.gif" width="<?=$acc[2] * $rat?>"><br>
3日<img src="bar.gif" width="<?=$acc[3] * $rat?>"><br>
になるかと。
01701672006/09/20(水) 00:48:26ID:???
>>169
ありがとうございます。ただ、説明不足で申し訳ないのですが、
1日とかは日付が入っているので実際は”2006年9月20日”になります。
それをDBで管理しているので
day | count
2006-09-18 | 30
2006-09-19 | 15
2006-09-20 | 40

というような表から抽出して表示させるわけです。
その場合、arrayで配列に代入する方法は使用出来ないかと思いまして。
説明不足で申し訳ないのですが、もう少しお願い出来ないでしょうか。
0171nobodyさん2006/09/20(水) 00:54:40ID:???
>>170
そのくらい、変換して配列に格納すればいいじゃん。
0172nobodyさん2006/09/20(水) 00:57:19ID:???
オブジェクト内で定義された変数を、
外部のオブジェクトが簡単に利用する方法は
ありませんか?

function get_content(){

$aaa = "aaa";
$bbb = "bbb";
$ccc = "ccc";

}

たとえばこんな感じに、変数を複数設定してしまったとき、
ほかのオブジェクトも、この変数を利用したいのですが・・・
0173nobodyさん2006/09/20(水) 01:01:47ID:???
>>167
後だしじゃんけん的質問はイカン。それに169がここまで書いてくれてるんだから後は
自分で考えるないとなー

?>
1日<img src="bar.gif" width="<?=$acc[1] * $rat?>"><br>
2日<img src="bar.gif" width="<?=$acc[2] * $rat?>"><br>
3日<img src="bar.gif" width="<?=$acc[3] * $rat?>"><br>
を

while ($row = mysql_fetch_assoc($result)) {
$w = $row["count"] * $rat;
echo <<<EOT

{$row["day"]}<img src="bar.gif" width="{$w}"><br>
EOT;
}
とかでいいんじゃまいか?日付の書式は適当にね
0174nobodyさん2006/09/20(水) 01:17:32ID:???
>>97
PHPスクリプトとして認識させないならreadfileもあるよ

>>148
xを使う。スペースは\sで。{15,15}は{15}でいいよ。
$str = 'outer"in\"ner"outer';
preg_match('!
    "( # デリミタとその内側のキャプチャ開始
    (\\\\.|[^"])+ # エスケープを避けて"までの最短マッチ
    )" # キャプチャとデリミタの終了
!x', $str, $cap);

var_dump($cap);
0175nobodyさん2006/09/20(水) 01:56:01ID:???
>>170
> その場合、arrayで配列に代入する方法は使用出来ないかと思いまして。
それで何が困るのかさっぱり分からん。
$acc = array(
"2006-09-18" => 30,
"2006-09-19" => 15,
"2006-09-20" => 40,
);
というアクセス数の配列にしといて
$maxwidth = 400; //バーの横幅最大
$max = max($acc);
$rat = $maxwidth / $max;
foreach($acc as $date => $cnt) {
?><?=$date?><img src="bar.gif" width="<?=$acc[$date] * $rat?>"><br><?php
}
でふつーに問題なくね?
0176nobodyさん2006/09/20(水) 09:21:48ID:???
flush()とob_flush()の違いってなんですか?
マニュアルを見た感じ、出力後にバッファをクリアするかしないかの違いしかないような感じなんですが、それだけですか?
0177nobodyさん2006/09/20(水) 09:52:13ID:???
ob_start
 以降の出力を内部バッファに保存する
  ↓
ob_flash
 内部バッファに保存された出力を、出力バッファへ移動する
  ↓
flash
 出力バッファからクライアントへ送信

まぁあれだ、ob_flash()やってもPHPが常に持ってるバッファに移動するだけで、
それを即座にクライアントへ送りたいならflash()が必要だって事だ。

タブン
0178nobodyさん2006/09/20(水) 10:59:42ID:???
>>137
>書き込み完了後にLocationで別ページに飛ばしちゃうのが簡単な対策

飛ばしても、「戻る」ボタンでPOST後のページに戻れば再POSTになっちゃうけどね。
0179nobodyさん2006/09/20(水) 11:16:15ID:???
>>178
ならないよ
Location の意味分かってる?
HTTPヘッダーを使用したリダイレクトね。

IE, Firefox, Opera の最新版で試したが、全部ならない。
0180nobodyさん2006/09/20(水) 12:36:06ID:74yeHhio
PHPのサーバー側の設定の話になるんですが、mail関数をコールすると止まってしまいます。
OSはLinux(CENTOS)で、PHPは4.3。
sendmailそのものは動いています。(telnetからメール送信した)
php.iniの記述は↓です。
sendmail_path = /usr/sbin/sendmail -t -i

特に問題ないはずなのに、原因が分からず途方にくれてます。
0181nobodyさん2006/09/20(水) 12:40:45ID:xiIYenEj
centos 4.4
apache 2.2.0
php 5.1.6
net-snmp 5.2.2

でphpを--with-snmpでコンフィグしてるんだけど、
apache起動時にエラーログに

Cannot find modue (IP-MIB): At line 0 in (none)
Cannot find modue (IF-MIB): At line 0 in (none)
Cannot find modue (TCP-MIB): At line 0 in (none)
Cannot find modue (UDP-MIB): At line 0 in (none)
Cannot find modue (SNMPv2-MIB): At line 0 in (none)
Cannot find modue (SNMPv2-SMI): At line 0 in (none)
Cannot find modue (UCD-SNMP-MIB): At line 0 in (none)
Cannot find modue (UCD-DEMO-MIB): At line 0 in (none)
Cannot find modue (SNMP-VIEW-BASED-ACM-MIB): At line 0 in (none)
Cannot find modue (SNMP-COMMUNITY-MIB): At line 0 in (none)
Cannot find modue (UCD-DLMOD-MIB): At line 0 in (none)
Cannot find modue (SNMP-FRAMEWORK-MIB): At line 0 in (none)
Cannot find modue (SNMP-MPD-MIB): At line 0 in (none)
Cannot find modue (SNMP-USER-BASED-SM-MIB): At line 0 in (none)
Cannot find modue (SNMP-NOTIFICATION-MIB): At line 0 in (none)
Cannot find modue (SNMP-TARGET-MIB): At line 0 in (none)
Cannot find modue (SNMPv2-TM): At line 0 in (none)

てmibsがない旨のエラーがでるんだけどなんでかな。
0182nobodyさん2006/09/20(水) 12:44:09ID:R2HBn3N4
似非保守詐欺師ブログ毒吐きてっくの正体
http://tech.heteml.jp/
1.現時点での個人情報
福井雅晴(偽名の可能性あり)
42歳、企業経営者。滋賀大学経済学部卒、カリフォルニア大学・バークレー校のPh.D(経済学)を取得
現在東京在住
2.てっくさんのお知り合い
http://www.geocities.jp/tatsuman/links.htm
http://www.jurists.co.jp/ja/attorney/detail/rn.shtml
http://ja.wikipedia.org/wiki/%E5%A4%A7%E7%9F%B3%E8%8B%B1%E5%8F%B8
ホリエモンのエピゴーネンの似非保守です。
3.やっていること
インターネット専門の広告代理店
保守系ブログの管理人
保守系ブログの管理人を操って政治的ムーブメントを起すこと(ちょい犯罪の可能性あり)
「エリート掲示板」管理人 参加者は福井晴敏や西村幸祐など(マジかよ!)
4.そしてなんと不敬な!
皇室を利用した振込み詐欺(女系天皇反対論者が文句を言えない個人の内面を弄ぶ卑劣な行為)
http://tech.heteml.jp/2006/03/post_429.html
本気で旧宮家復籍キャンペーンフラッシュをつくるつもりであれば一刻も早く会計報告書を自分のブログに掲載しておくれ。
0183nobodyさん2006/09/20(水) 12:52:34ID:???
MySQLのサーバ上に指定のテーブルが存在するか否かを
PHPで調べられないか試しています。
以下のようなソースを書いたのですが、思い通りになりません。
どこがおかしいかご指摘いただけないでしょうか?

$con = mysql_connect($dbserver, $dbuser, dbpassword);
$tabls = mysql_list_tables($dbname,$con);
if($tabls=="member"){
echo "memberテーブルが存在します";
}else{
echo "memberテーブルがありません";
exit;
}
0184nobodyさん2006/09/20(水) 12:58:59ID:???
>>183
関数の戻り値ぐらい確認しろよ
resource mysql_list_tables ( string database [, resource link_identifier] )

http://jp.php.net/mysql_list_tables
0185nobodyさん2006/09/20(水) 13:09:09ID:???
>>180

パッと見、問題無いように見えるからクリティカルな回答
じゃないが、
phpinfo()関数を実行した時
Local Value
Master Value
共に
/usr/sbin/sendmail -t -i
になっているかな?
後
>mail関数をコールすると止まってしまいます。
ということだけど、止まるって症状をもっと具体的に。
PHPのエラーメッセージも出ないってこと?
0186nobodyさん2006/09/20(水) 14:20:55ID:74yeHhio
>>185
アドバイスありがとうございます。
はい。local,master共に↓こちらです。(そのままコピペ)

sendmail_path /usr/sbin/sendmail -t -i /usr/sbin/sendmail -t -i

>ということだけど、止まるって症状をもっと具体的に。
>PHPのエラーメッセージも出ないってこと?

はい。mail();の行で突然止まってます。
関係あるか分かりませんが、mb_encode_mimeheaderをコールした時も同症状です。

ちなみに、mbstringの設定なのですが、Windowsだとextension=php_mbstring.dll
というようにライブラリを呼び出していますが、Linuxは設定しなくても良いのでしょうか?
0187nobodyさん2006/09/20(水) 14:51:35ID:yPqg/Cyb
php_selfが危ないと言われるのは、ファイル名以外にディレクトリ情報も
含まれているからですか?

basenameを併用したら安全でしょうか?
0188nobodyさん2006/09/20(水) 15:23:40ID:???
PHP_SELF PATHINFO で検索と幸せになれるかもしれない
0189nobodyさん2006/09/20(水) 15:49:36ID:ap8SjPDw
>>186
止まるとはmail()から返ってこなくなるということ?
だとしたら具体的なmail()の呼び出し方を貼ったら・・・?
0190nobodyさん2006/09/20(水) 16:58:05ID:???
>>186
display_errors をonにしろ
0191nobodyさん2006/09/20(水) 17:01:05ID:???
ディレクトリが存在する場合はスルーし、存在しない場合は作成するという
処理を試しています。

$dir_name="$site_url"."files/";  //$site_urlにはサーバのURLが入ります。
if(!is_dir($dir_name)){
mkdir("$dir_name",0777);
}else{
echo "作成済みです";
}

としているのですが、アクセスする度に何度も作成しようとして、
存在している場合はスルーされません。
$dir_nameに絶対パスを指定しているので、ディレクトリと見なしていないかも
しれませんが、こういう場合、どうすればいいのでしょうか?
0192nobodyさん2006/09/20(水) 17:02:59ID:wx80eLIi
<form action="<?=$_SERVER['SCRIPT_NAME']?>">

こうかいても、ブラウザ上でソースひらくと上記とそのまんま表示されてしまいます。
参考書や多くのサイトでは<?= ?>でくくれって書いてありますけど、
<?php echo $_SERVER['SCRIPT_NAME']?>">
とすると意図した結果を返します。
phpのバージョンによるものなのでしょうか?

当方の環境はphp5.1.6でサーバapache2.0.59です。
0193nobodyさん2006/09/20(水) 17:07:39ID:???
phpの設定によるものです。
0194nobodyさん2006/09/20(水) 17:17:32ID:???
横から補足すると

short_open_tag が off

<?=の形式はあんまり推奨されないけど、「どうしても」使いたいなら
php.ini の short_open_tag を off に設定するか、
.htaccess に php_flag short_open_tag off を設定する。
01951922006/09/20(水) 17:23:41ID:???
必要ないものは切っておきたいので現状のまま使っていきます。
ありがとうございます。
0196nobodyさん2006/09/20(水) 19:33:42ID:???
login.phpにてログインしたらセッションを与えて、
hoge.phpでif文とisset関数でセッション変数をチェックするコードを書きました。
セキュリティに気をつけるところがあればご指摘お願いします。

データベースは使っておりませんが、セッションをデータベースに格納した
ほうが安全が高まるのでしょうか?
0197nobodyさん2006/09/20(水) 19:49:24ID:???
>>196
漠然としすぎて指摘のしようが無い。
DBに保存するかどうかも安全とはほぼ無関係。
そのレベルの情報量でセキュリティ的なものが判断できると思ってる
キミの無知加減が1番危ない気はするw
0198nobodyさん2006/09/20(水) 19:57:17ID:???
質問です。
セッションについてです。
クライアントがリクエスト、サーバがセッション開始
続けてもう一度クライアントがリクエストした場合
クライアントがセッションのIDをサーバに送るのですか?

クライアント側にIDみたいなのを保存しなければ成り立たない
機能だと思いますが、そのIDはクッキーとして保存するのですか?
だとすれば、クッキーの内容を変更するなどで、
他のセッションIDを送ることもできると思います。

つまりクライアントから受け取ったセッションIDには何の信憑性もないのでしょうか?
0199nobodyさん2006/09/20(水) 20:09:10ID:???
>>198
です。セッションIDは通常はクッキーで保持。
クッキーが使えない場合はクエリー文字列のパラメータに埋め込みも使用可能。
(この辺はphp.iniの設定次第)

他人のセッションID送信で中身を横取りする手法はセッションハイジャックといい
セキュリティ対策では重要なポイントの1つだと思う。
セッションハイジャックでググれば問題点もその対策方法も色々出てくると思うよ。
0200nobodyさん2006/09/20(水) 20:09:20ID:???
>>198
セッションIDは通常Cookieに保存され(逆にCookieが使える環境ではCookieのみにすべき)、信憑性は無い。

が、個人が現実的な時間内で破れるほどヤワなものではない。
発行されうるIDのパターンは殆どの環境では少なくとも2^128ある。

ユーザが送ってきたセッションIDはサーバに保存されている値と比較され、マッチした場合にのみ保存されている値が取り出せる。



セッションIDの信憑性より、下手な設定にしてセッションハイジャックされる心配をしたほうがいいな
0201nobodyさん2006/09/20(水) 20:12:01ID:???
>>198
ttp://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html#PHP_Session
0202nobodyさん2006/09/20(水) 20:21:29ID:vCicRGZl
データベースにjpg等の画像を登録したいとき、
PHPからはどのような手順や関数を使えばいいのでしょうか?
また、登録された画像を取り出したいときはどのようにしたらいいのでしょうか?
0203nobodyさん2006/09/20(水) 20:30:20ID:???
もうすこし自分で調べてからにしてくれよ、漠然としすぎて答えてもすぐにわからないことにぶつかるだろ
0204nobodyさん2006/09/20(水) 20:34:08ID:???
>>202
base64_encode()でバイナリ→文字列変換してそれをtext型のフィールドにinsert。
取り出しは逆にselectした結果をbase64_decode()でバイナリ変換。
辺りでいいんじゃない?
0205nobodyさん2006/09/20(水) 20:38:54ID:AVQePo+U
php.iniのsession.auto_start=0の場合、
session_start();はセッションを扱うページすべてに記述しなくてはならないのですか?
それとも、あるページに一回だけ記述しとけばいいのでしょうか?
0206nobodyさん2006/09/20(水) 20:54:41ID:???
>>204
バイナリのまま入れちゃだめなんですかね
0207nobodyさん2006/09/20(水) 20:57:24ID:???
だめ
0208nobodyさん2006/09/20(水) 21:17:20ID:???
>>206
DBによる。PostgreSQLならラージオブジェクトとして扱えるが。
0209nobodyさん2006/09/20(水) 22:08:06ID:???
>>207
なんでダメなんですか?
0210nobodyさん2006/09/20(水) 22:11:34ID:???
image関数で作る画像にデータを渡す方法としては何が好ましいですか?

メインスクリプト中にそのまま画像を出すことができないのでGETか何かで渡すのが一番簡単かと思いますが、
データ量が多くなった場合はセッションか何かを使うのがいいのでしょうか?
0211nobodyさん2006/09/20(水) 22:16:00ID:???
ありがとうございました>>セッションについて教えてくれた方
0212nobodyさん2006/09/20(水) 22:48:18ID:???
>>206
207じゃないけど、PHPでバイナリデータの文字列エスケープ処理なんて正常に動作すんの?
エスケープ処理できなきゃSQL文が壊れる場合があるし俺は怖くてバイナリそのままなんて書けないな。
あと、DBによっては強制的に文字コード変換かけるようなのもあるじゃない。バイナリ壊されるよね。
0213nobodyさん2006/09/20(水) 22:49:13ID:???
>>210
ごめん。ちょっと状況が把握できない。
どういう構成のプログラムなんだろ。
0214nobodyさん2006/09/20(水) 22:57:58ID:???
>>213
統計値か何かを計算して表にして表示するスクリプトがあるとしますよね。
表だけでは寂しいのでそれにグラフを表示させたい場合、メインスクリプトからどうやって
画像表示スクリプトにデータを受け渡すか、というような場合の話です。

画像表示スクリプト内で同じ計算をするのは無駄ですし、同時に表が出せませんよね(画像で作れないこともないけど)。

それともこういう構成は変なんでしょうか。
0215nobodyさん2006/09/20(水) 22:59:20ID:???
>>214
GETで値を渡せばいいんじゃないかな
0216nobodyさん2006/09/20(水) 23:07:41ID:???
>>214
・メインスクリプトから画像生成スクリプトを呼び出し、
 生成した画像のURLをHTMLに埋め込む。
・GET・セッションなどお好みの方法でデータを渡し、生成した画像を返す。
0217nobodyさん2006/09/20(水) 23:35:29ID:???
>>214
セッションが良い気がする
書き込み中に読み込んじゃうことないし
あとは画像がどういうデータから生まれたものか分かるように入力値のハッシュを識別子に使うとか
0218nobodyさん2006/09/20(水) 23:46:35ID:Wdl0S+zk
requireやincludeの内容を変数に代入するって出来ますか?
あるファイルを読み込んでそのファイルにデータを追加するというのを
作成したいのですが、書き込まれる内容は別ファイルにある中身に
したいのです。

$fp=fopen("$file_name","w");
fwrite($fp,"別ファイル");

上記の”別ファイル”の箇所に書き込み用変数が入るとします。
何か良い方法はないでしょうか?(別ファイルへのパスを書いても駄目でした。)
0219nobodyさん2006/09/20(水) 23:55:01ID:???
>>218
説明が抽象的で勘違いしてるかもしれないが
copyしてそれを追記openしてちょろっと書くだけでは?
requireってことはPHPコード?もしそうならob_start〜
02202182006/09/21(木) 00:04:32ID:???
説明が足りなくてすみません。
目的としてはフォーム(form.html)からファイル名(file_name)とタイトル(title)
を入力して送信(write.php)したら、そのファイル名のファイルが出来上がる。
その出来上がったファイル内には、別ファイルの内容+指定箇所が
フォームで入力したタイトルに入れ替わっているというやつです。

別ファイルの内容を変数に代入するのは
$tmp_file="templete.php";
$array = file($tmp_file);
$templete = join("",$array);

で出来まして、その後に>>218のソースを追記したら
新規ファイル内にtemplete.phpの内容が書き込まれているのですが、
フォームで入力した「タイトル」は変わっていないのです。
なのでソースが違うのかな?っと思った次第です。
0221nobodyさん2006/09/21(木) 00:24:28ID:???
>>210
テンポラリファイルかDBにデータを保存してファイル名やIDをGETで渡すとか。
で、画像生成プログラムが画像生成完了後にそのデータを削除。
0222nobodyさん2006/09/21(木) 00:24:44ID:???
>>220
そもそも説明で言ってる事が分からないし、そんな物を何に使うのかも分からん
"form.html""write.php""template.php"のコードを出すか、「エスパー回答希望」と言ってくれ

まぁ、何か盛大に勘違いして妙な事やってるのだけは理解した。
0223nobodyさん2006/09/21(木) 00:28:43ID:???
>>220
最初からテンプレートと言ってくれればw
面倒だから色々汲み取った上でサンプル書いちゃうよ
--- template.php ---
<?php
$username = "%REPLACE_USERNAME%";
$password = "%REPLACE_PASSWORD%";
コード略
?>
--- writer.php ---
<?php
$replace_rule = array("%REPLACE_USERNAME%" => "218", "%REPLACE_PASSWORD%" => "1234");
$tmpl = file_get_contents("template.php");
$fp = fopen("result.php","w");
fputs($fp, strtr($tmpl, $replace_rule));
?>

>>221
削除するのは生成側じゃなくて表示側では
02242212006/09/21(木) 00:28:52ID:???
>>215-216
渡すデータが大きくなった場合にどうするかって話で何故GETが選択肢に入るの?
>>217
セッション使うと同じページを2枚とか3枚とか表示させたとき、
どのデータで画像を生成するのか判別するのが複雑にならない?
こういう場合ではデータIDをページ表示毎に生成した方が都合よさげな気が。
02252212006/09/21(木) 00:30:48ID:???
>>223
表示側=画像生成プログラム だと思うんだが違う?
<img src="画像生成プログラム?データ識別ID">
って形で呼び出されるもんだと思ってるんだけど。
0226nobodyさん2006/09/21(木) 00:36:19ID:???
>>225
ごめん、データ=画像データだと勘違いしてた
0227nobodyさん2006/09/21(木) 01:01:26ID:???
画像データをDBに入れる場合、わざわざBase64エンコードしなくても、
BLOB型のカラムにすればバイナリのまま入れられるでしょ。
0228nobodyさん2006/09/21(木) 01:34:59ID:k7zFBu8v
Formで、textareaの文章の先頭に改行を入れてPOSTすると、
なぜか勝手に改行コードが一つ削除されてしまいます。

具体的には、たとえば先頭に改行(エンターキー)3つ置き、
その後に文章が続くものをPOSTし、それを受け取って表示してみると
改行が2つに減っているのです。逆に文章の末尾にある改行コードは影響を受けません。

これはどうしてなのでしょうか?
ちなみに上記において、受け取ったPOSTデータは、変換やエスケープを一切せずに
表示しても、やはり先頭にある改行が一つ勝手に削除されてしまいます。

phpのバージョンは4.3.1です。
0229nobodyさん2006/09/21(木) 01:46:30ID:???
>>228
少なくとも4.4.1では再現しない。
0230nobodyさん2006/09/21(木) 01:48:32ID:???
>>228
4.3.1はハッキリ言って既に非常に古いからアップデートしたほうがいい
02312282006/09/21(木) 01:48:37ID:k7zFBu8v
追記ですが、いくつかの有名サイトでも>>228と全く同じ現象を確認できました。

たとえばmixiのプロフィール変更画面で、「自己紹介」の欄(textarea)にて
先頭部分でエンターキーを2回押して改行を2つ入れてから本文を書いたとします。

それで「変更ボタン」を押すと、当然プロフィールには、たった今POSTした内容(改行2つ+本文)が反映されています。
ところが、その状態で再度プロフィール変更画面に行ってみますと、
なぜか自己紹介欄textareaの改行が1つに減っています。そのまま何を手を加えずに「変更ボタン」を
押しますと、当然のことながらプロフィール画面に反映される先頭の改行は1つに減っています。

ここでまたプロフィール変更画面に行きますと、また改行が1つ減っています。
すなわち、こうやって繰り返していると、一番初めに入力したはずの改行は0になってしまうのです。


mixiでも発生する現象だということは、PHPの問題ではなく
HTMLの問題(仕様?)なのでしょうか・・・。
02322282006/09/21(木) 01:50:09ID:k7zFBu8v
>>229
>>231で書きましたように、mixiで再現できますので、お試しください。

>>230
Perlを使っているmixiでも再現できたので、PHPのバージョンの問題ではないと思われます。
0233nobodyさん2006/09/21(木) 01:50:30ID:???
ブラウザの問題かもよ。
02342282006/09/21(木) 01:52:15ID:k7zFBu8v
>>233
たしかにその可能性もありますね。
当方のブラウザはIEの最新版です。
0235nobodyさん2006/09/21(木) 02:03:59ID:???
>>231
あー、了解。mixiで再現できた。これはHTMLかブラウザの問題だね。
送信後のデータ受け取りじゃなく、ページの表示の時点で消えてる。

<textarea name=hoge>
<?php echo $hoge ?>
</textarea>
なら多分問題は出ないと思うよ。(最初から前後に改行を含めた書き方)
ところが
<textarea name=hoge><?php echo $hoge ?></textarea>
と書くと、$hogeの最初の改行をブラウザが無視してくれてる。

これってどっちの問題なんだろ…俺も後者の書き方がHTML的には正しいと思ってたんだが。
IEのこのHTML解釈って何かおかしくないか?
02362352006/09/21(木) 02:13:46ID:???
Firefox1.0.4でも同じ解釈になった。(最初の改行は無視)
ってことで<textarea>の直後は必ず改行が正しいことになってるのかも。

余談だが、Firefoxでは
<input type=hidden name=hoge value="
データ
">
みたいな改行を含むhiddenデータは前後の改行が除去されて送信されるw
おかげでmixi(確認/キャンセルのデータ受け渡しをセッションでなくhiddenで行っている)では
先頭1行どころか10行分だろうと先頭の空行が丸ごと無視されるという結果になった。
02372282006/09/21(木) 02:14:54ID:k7zFBu8v
>>235
たしかに前者の書き方ですと、>>231の問題は解決されますね。
ただその代わりに、今度は余計な改行が常に1つ、先頭に発生してしまいます。
(最初から改行を含めてるので当然ですが・・・)
たとえば前者の書き方をしておいて、textarea($hoge)が空の状態でマウスカーソルを置くと、
1行目が空行で、2行目からカーソルが始まってしまいます。
つまり1行目の改行が勝手に付いてしまっている状態ですので、今度はそれを消す手間が出てしまいます。


><textarea name=hoge><?php echo $hoge ?></textarea>
>と書くと、$hogeの最初の改行をブラウザが無視してくれてる。

そうですね。無視したあげく、再POSTの際には無かったことになっています。


>IEのこのHTML解釈って何かおかしくないか?

もしこれがIEだけでの現象だとしたら、
完全にIEの解釈がおかしいですよね。。。
02382282006/09/21(木) 02:24:28ID:k7zFBu8v
>>236
FireFoxでも同じ結果でしたか。。。
でも、
><textarea>の直後は必ず改行が正しいことになってるのかも。
・・・だとしたら、私が>>237で書きましたように、
空のtextareaには必ず先頭に空行が1つ出来てしまうわけで、
かなり気持ち悪いですよねぇ・・・。
02392352006/09/21(木) 02:25:24ID:???
>>237
> たとえば前者の書き方をしておいて、textarea($hoge)が空の状態でマウスカーソルを置くと、
> 1行目が空行で、2行目からカーソルが始まってしまいます。
ごめん。これはうちじゃ再現しない。
<textarea name=hoge>
</textarea>
って状態のHTMLでカーソルが2行目に移動できる、って意味だよね?

Windows IE6、Firefox1.0.4どっちでも再現しなかった。
02402282006/09/21(木) 02:32:32ID:k7zFBu8v
>>239
<textarea name=hoge>
</textarea>
・・・なら問題は無いのですが、mixiのプロフィール変更画面のような使い方をする場合、
実際にはスクリプト内では下記のようになると思います。
echo "
<textarea name=hoge>
$hoge
</textarea>
";
このとき、$hogeに何も入っていないと、出力されたHTMLは
<textarea name=hoge>

</textarea>
となってしまい、空の$hogeの分がぽっかり空行1つになってしまうのです・・・。


(※ちなみにこれはmixiでは再現できません。mixiではプロフを空欄に出来ない仕様なので)
0241nobodyさん2006/09/21(木) 02:36:40ID:???
>>240
あー、すまん。
<textarea name=hoge>
$hoge</textarea>
って書き方にしてみてくれ。
02422282006/09/21(木) 02:40:15ID:k7zFBu8v
>>241
あっっ、それで解決しました!!
・・・そうですよね、冷静に考えたら、もし$hogeが空だったときに
<textarea name=hoge>
</textarea>
という形にするには、$hogeの後ろの改行を無くせばいいだけでしたね。。。

頭が混乱しててそんな単純なことにも気がつきませんでした。
>>241さん、ありがとうございます!!

(それはともかく、やっぱりブラウザの解釈はおかしい部分がありますよねぇ…)
0243nobodyさん2006/09/21(木) 02:43:01ID:???
いや、わかんねー。
2大ブラウザで同じ解釈するんならスタンダードは<textarea>の次は改行なんだろうさ。
02442282006/09/21(木) 02:49:48ID:k7zFBu8v
>>243
ということは、W3Cだか何かで、textareaタグの後には必ず改行を
入れるべし・・・などと定めてるんでしょうか?

もし仮にそうだとしても、
<textarea name=hoge>hoge</textarea>
って書いた場合に、勝手に先頭の改行コードを1つ削除する…という動作の意図がよく分かりませんね。。。
0245nobodyさん2006/09/21(木) 02:51:10ID:???
なんかよくわからないけど、コレおいときますねー
つ[ttp://www.hyuki.com/diary/dia0402.html#i15_16]
>SGMLでは開始タグの直後、終了タグの直前のline breakは無視しなければならない
02462282006/09/21(木) 03:03:59ID:k7zFBu8v
>>245
それズバリですね!! ありがとうございます。
しかしそれにしても人間に優しくない規則というか、
あまり直感的じゃない決まり事だなぁ・・・。

特にプログラミングする時は、
<textarea name=hoge>{$body}</textarea>
とかって書きたい時もあるのに。。。
0247nobodyさん2006/09/21(木) 03:08:52ID:???
こっちの方が詳しいね。
ttp://www2u.biglobe.ne.jp/~fsasaki/WikiFan/wiki.cgi?WalWikiBugTrack%2f012
>各 Web ブラウザの動作状況
こういうのを見てどうするかは自分で考えればいいかと。
0248nobodyさん2006/09/21(木) 03:33:22ID:???
>>247
おお…、まさにこのスレでの今回のやり取りと全く同じことが漏れなくまとめられてるw

でもこの問題、意外と話題にならないよね。
少なくとも過去、このくだ質スレで今回のような話題を見かけた記憶がない。
02492352006/09/21(木) 04:04:15ID:???
>>245
SGML的に
「開始タグの直後、終了タグの直前のline breakは無視しなければならない」
ってのは確かに聞いたことあるけど、実際には改行って全然無視されてなくて、
例えば
hoge<span>
aho
</span>hoge
は
hoge aho hoge
みたいに空白が空いて表示されるよなw

しかも、>>247のレポートでも触れられてるけど
> その結果、興味深いことがわかりました。
> それは、「テキストエリア textera の場合タグの直前の改行は削除されない」という事実です。
という中途半端っぷりだし。
気付かないと結構ひっかかりそうな問題だよなー。
うん、いい勉強になったわ。
02502352006/09/21(木) 04:08:00ID:???
ちなみに出力にPHPタグを使った場合、?> の後ろの改行はPHPが自動除去するので
<textarea name=hoge>
<?php echo $hoge ?>
</textarea>
という最初(>>235)の書き方で多分問題ないんだわ。

>>240みたいに "〜" の中で変数展開の書き方だと
</textarea>の前の改行が問題になっちゃうのな。
0251nobodyさん2006/09/21(木) 06:21:28ID:yxCjYnZV
header('Refresh: 0;URL=○○○○○○');

ヘッダー関数は絶対URLで書けとどこかできいたのですが、
この場合でも相対パスは使っちゃいけないのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています