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

△▲ WebProg 初心者の質問 Part19 ▼▽

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/03/06(金) 00:11:17ID:???
2ちゃんねるは初めて。 WebProg 板は初めて。
質問したいけど、どうしたら良いか分からない。

そんなときは、ここに書き込んでください。
板の住人や、その他が、けなしながら、厳しく教えてくれるかも。

質問する前に、まずはここを読んでね。
【注意事項】
・質問する前にGoogleで検索してみましょう
http://www.google.co.jp/
・環境(ソフトウェアのバージョンなど)は、必ず書いてください。できるだけ詳しく。
 後から情報を書き足す、いわゆる情報の小出しは極力避けてください。
・何がしたくて、何ができて何ができないのかを書きましょう
・マルチポスト(複数のスレッドで質問する行為)は絶対に禁止です。
・過去ログは必ず読みましょう。あなたと同じ質問をしてる人がいるかも知れません。

2ch 総合ガイド
http://www.2ch.net/guide/

お願い。
適切な、板、スレ、を発見した場合、誘導してあげましょう。
スレの性質上 age 進行でお願いします。

関連情報は
>>2-3辺り

☆前スレ☆
△▲ WebProg 初心者の質問 Part18 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1219842559/
0581nobodyさん2009/04/18(土) 14:26:07ID:???
URLエンコードしたURLでアクセスしてる?
05825802009/04/18(土) 14:40:59ID:7woKrGti
>>581
EUCの場合、「猫.JPG」は「%c7%ad.JPG」、「馬.JPG」は「%c7%cf.JPG」でアクセスしています。
しかし、猫は表示されるのに馬は404です。熊も同様にやってますが、やはり404です。

先ほど別のサーバー(Apache/2.2.8 (Ubuntu))で試してみたのですが、
そちらではEUCでも猫・馬・熊ともうまく表示されました。

となると最初のサーバー(Apache/2.0.51 (Turbolinux))で
何か設定が違うのだと思うのですが、見当が付かずに困っています。

何か心当たりがあればアドバイス頂けると助かります。
0583nobodyさん2009/04/18(土) 14:52:40ID:???
そもそも日本語名ファイルを使うのはおかしいだろ
0584nobodyさん2009/04/18(土) 15:03:10ID:???
エラーログ見ろよ
05855802009/04/18(土) 15:12:09ID:???
>>583
ファイルアップロードのプログラムを使うので、日本語も通したいと思います。

>>584
404なので、エラーログはFile does not existと出るだけです。
0586nobodyさん2009/04/18(土) 15:31:09ID:???
Apacheが受け取って実際に使用されるURL
ls -1 *.jpg | od -cx とかしてファイル名のバイナリが期待どおりか

このへんは確認済み?
0587nobodyさん2009/04/18(土) 15:31:21ID:???
日本語使いたいならunicodeにしろよksg
0588nobodyさん2009/04/18(土) 15:31:43ID:???
mod_encodingで
SetServerEncoding EUC-JP
てしたらどうだ?
0589nobodyさん2009/04/18(土) 15:41:54ID:???
有名なアップローダが元ファイル名を採用してない理由を考えたほうが良い
0590nobodyさん2009/04/18(土) 17:30:59ID:???
決められた人しかアップロードできないようにするんなら細かいこと言わなくてもいいんじゃね?
0591nobodyさん2009/04/18(土) 18:23:14ID:???
>>581
URLエンコードって入門書読むとたまに
出てくるんだけど、別に無視しても
動くんだけど、もしかしてPHPの古いバージョンでだけ
気にしなければならない設定?
0592nobodyさん2009/04/18(土) 18:26:53ID:???
いや全然そんなことはない
0593nobodyさん2009/04/18(土) 18:32:25ID:???
../html/index.html とかいうファイル名をそのまま受理してしまう
アップローダが出来上がらないことを祈る。


0594nobodyさん2009/04/18(土) 18:38:21ID:???
>>591
ブラウザが自動変換してる場合もあれば
サーバ側が対応してる場合もある
05955802009/04/19(日) 00:41:36ID:4BUZ2qor
>>588
mod_encodingを設定しても状況は変わりませんでした。
色々試したところ、どうもApacheが常にUTF-8でファイルを探しにいっているようです。

「馬.JPG」をEUCでURLエンコードし、「%c7%cf.JPG」としてアクセスした場合、
サーバー上に、ファイル名の文字コードをEUCとして保存した「馬.JPG」があっても404になります。
しかし、UTF-8で保存した「馬.JPG」がある場合、画像が表示されました。

EUCでURLエンコードしてアクセスしているにもかかわらず、
UTF-8で名前が付けられたファイルが呼び出されていることになるので、
Apacheが内部で勝手に変換しているようです。

この変換をさせないためには、Apacheのどの設定を変えればよいでしょうか?
0596nobodyさん2009/04/19(日) 11:33:00ID:???
>>595

>>587はスルーですか
0597nobodyさん2009/04/19(日) 11:33:44ID:???
>>595
変換を止める記述があるがお前の態度が気に入らないから謝るまでは教えない
05985802009/04/19(日) 15:52:32ID:???
>>596
文字コードを変更するなら、>>580で書いてる通りUTF-8が通るのでそれを使います。

ただ、今回はEUCの日本語ファイル名を使用したいので、
UnicodeもUTF-8も使用できません。あくまでEUCが対象なのです。
0599nobodyさん2009/04/19(日) 16:10:07ID:???
エンコードの指定も入れる
0600nobodyさん2009/04/19(日) 19:56:57ID:???
>>598
回答をもらったら全てにレスしましょう礼儀です
行儀の悪い人に回答しない方もいらっしゃいますから
0601nobodyさん2009/04/19(日) 20:00:48ID:???
Perlを勉強していたころは、
jcode.plとかいうものがひんぱんに
出てきていたのですが、
PHPを学びはじめてから
まったく出てきません。

なぜでしょうか?
0602nobodyさん2009/04/19(日) 20:45:26ID:???
>>600
つまり>>587の行儀が悪いからレスが貰えなかったと
0603nobodyさん2009/04/19(日) 21:25:39ID:???
>>601
大雑把に言うと、jcode.plと同等の機能が
PHPには最初から組み込まれてるんです
0604nobodyさん2009/04/19(日) 23:03:19ID:???
>601
ちうか、perl界隈でもjcode.plを使わないのがトレンド。だいたい2000年ごろくらいまでか、使われてたのは。
jcode.plが出て来たら、問答無用で時代遅れと見なしていい。コードが古いのか書いてる奴が古いのかは知らんが。

Perlのライブラリであるjcode.plがPHPに登場しないのは当然の話だな。
お前が今まで書いたPerlのコードだって、PHPで動かそうとしたって動かないだろ。
0605nobodyさん2009/04/19(日) 23:21:40ID:???
jcode.phpは存在するが、mbstring系が入っていれば不要。
0606nobodyさん2009/04/19(日) 23:22:13ID:???
>>602
つまり>>580=>>602ってことだと
0607nobodyさん2009/04/19(日) 23:35:25ID:???
>>606
>>602は俺だが。。。
このスレはお前と>>580しかいないのかと小一時間(ry
0608nobodyさん2009/04/19(日) 23:39:16ID:???
ところで俺はここまでレスしてない
0609nobodyさん2009/04/19(日) 23:53:28ID:???
PerlでCGIを勉強していたころは、
「クエリーストリング」
という用語がしつこく出てきましたが、
PHPの教科書にはほとんど出てきません。

なぜでしょうか?
0610nobodyさん2009/04/20(月) 00:20:53ID:???
感謝されたがり野郎うざすぎ。
感謝されるやつと感謝されないやつがいるっていう現実がすべてだろ。
悔しかったら感謝されるようなレスしろよ。
0611nobodyさん2009/04/20(月) 01:01:45ID:???
データベースにファイルを格納していて、

fileテーブル
id,name,type,size,blob

こんなかんじのテーブルなのですが、

select id,name,type,size from file

のように、取得するフィールドを指定すれば無駄にblobがselectされるのを防げるのでしょうか?

それとも、

file_bin
id,file_id,blob

のように、blob型だけ別テーブルに分けたほうが良いのでしょうか?

よろしくお願いします。
0612nobodyさん2009/04/20(月) 01:15:49ID:???
どうしても*で全称指定したいなら後者でいいよ
0613nobodyさん2009/04/20(月) 01:32:34ID:???
Selectされなければ読み出されることも無い
後者のように分割する意味はほとんどないし、無駄にJoinが必要になる

ファイルが何GBもあるようなときはInsert/Update中にFileテーブルがロックされるのを防げることがあるかも?ないかも
0614nobodyさん2009/04/20(月) 03:13:26ID:???
BLOBの取り扱いなんて、処理系によって違うだろう
そもそも板違いだな。DB関係の板で質問してみたら?
06156112009/04/20(月) 11:51:13ID:???
レスありがとうございます。

>>612-613
きちんとselectで指定すれば、無駄に読み込まれることはないようですね。

>>ファイルが何GBもあるようなときはInsert/Update中にFileテーブルがロックされるのを防げることがあるかも?ないかも
これは気がつきませんでしたが、
今回はそこまでアップロードに時間がかかるようなファイルはアップロードしないと思うので、問題ないと思います。

OpenPNE3などのテーブル構造を見てみたら、
fileとfile_binなどに分けられていたので、
なにか意味があるのかなと思い質問したのですが、
それほどメリットはないという認識でよいのでしょうか?

>>614
処理系というのは、ここではデータベースのことでしょうか?
書き忘れてしまったのですが、今回使っているのはMySQLです。

板違いということについては申し訳なく思っています。
しかし、WebProgに関係ないわけでもないので、どうかご容赦ください・・・
0616nobodyさん2009/04/20(月) 21:04:45ID:???
JSPで、Blogを作ろうと思っています。
どこのBlogでもそうですが、以下のような形式で、ユーザIDを含むURLにアクセスすると、そのユーザのページにアクセスできます。
例)
http://<;ユーザID>.example.com/index.html
http://example.com/<;ユーザID>/index.html

新規登録で、ユーザを作成、DBに格納→DBにあるユーザIDを上記形式でそのユーザのページにアクセスできるようにするテクニックを教えていただけませんか?
0617nobodyさん2009/04/20(月) 21:13:24ID:???
>>616
それって全部教えろって言ってないか?
0618nobodyさん2009/04/20(月) 21:14:01ID:???
レンタルblogでも始めるの?
06196162009/04/20(月) 21:35:07ID:???
Strutsフレームワークとか参考書見てるんですが、そのようなのは、載ってないですし、
web.xmlからどうにかできないか考えていたんですが、やりかたが思い浮かばないですし、
まず、これを実現するにあたる基となる何かが必要だと思うのですが、
今のところ、考えてみたのは、
ユーザ登録後、OSレベルでDir(ユーザID)掘って、
Request側) 指定Dir配下を検索→ヒット
Response側) http://<;ユーザID>.example.com/→アクセス可

たぶんできると思うのですが、これ以外にやりかたあるのでしょうか?
上記のやり方は格好わるいし。
0620nobodyさん2009/04/20(月) 21:38:34ID:???
>>619
ほい
http://httpd.apache.org/docs/2.2/ja/mod/mod_userdir.html
0621nobodyさん2009/04/20(月) 21:56:38ID:???
サブドメインやりたいならDNS書き換えやらなきゃ
06226162009/04/20(月) 22:02:49ID:???
>>620
ありがとう。
全くその通りです。
Apache modにこんなのあるんですね。(常識?
大変助かります。

やっぱり、ユーザ登録後、mkdirしないとダメかな。
希望としては、ユーザ毎のDirectory無しで。。。(・ω・`)
0623nobodyさん2009/04/20(月) 22:05:20ID:???
Javaなら、Servletのurl-patternを/*とかにすりゃいいじゃないか。
0624nobodyさん2009/04/20(月) 22:18:05ID:???
>622
www.example.com/hoge/username/fuga.html
hoge.cgiとかを動かして、拡張子をmultiviewとかで隠蔽すれば、上記のURLでアクセスさせられる。
username/fuga.htmlはPATH_INFOで受け取ってアプリケーション側でなんとかする。
やった事無いけど、DirectoryIndexも併用すればexample.com/username/でアクセスさせられると思う。

mod_rewriteを使っていいなら、パスはなんでもアリになる。
リクエストURLを正規表現で書き換えられるから、事実上なんだってできる。

独自ドメインは流石にDNSとかバーチャルホストをどうにかしないといけないと思うのだが、その辺は良く分からん。
0625nobodyさん2009/04/21(火) 04:55:48ID:TMA0XNZY
metaタグのhttp-equivは、httpヘッダを上書きするとのことですが、
わざわざ上書きせずに、最初からhttpヘッダに書いておいた方がよくないですか?
何でわざわざmetaタグを書かなければいけないのですか?
0626nobodyさん2009/04/21(火) 05:33:53ID:???
まあぱっと思いつくのはコンテンツは常に鯖から送信されるわけじゃないので、
ローカルに保存された場合とかProxyに削られちゃ場合とかには役に立つかもってことかな

また、コンテンツ内のスクリプトタイプ等をデーモンが調べてヘッダを生成するってのは、
やってできないことはないが100人いたら100人にやめろと言われる実装だと思う

で、metaタグとはその名の通りコンテンツのメタレベルに言及するためのタグだから
コンテンツがやり取りされた状況(HTTPなりなんなり)について干渉する方法があることに
特に不思議な点はないと思う

UAに対する通知の仕組みをあたらしく作らずにHTTPヘッダを流用したのは
俺は悪くない選択だと思うけど、その辺どういう議論があったんだろうね
0627nobodyさん2009/04/21(火) 05:55:10ID:???
$a['0']=1;
$a[0]=2;

どっちが正式な書き方?
0628nobodyさん2009/04/21(火) 06:03:59ID:???
正式って何?
あと言語は何?
0629nobodyさん2009/04/21(火) 07:16:42ID:???
>>628
PHP
0630nobodyさん2009/04/21(火) 07:39:04ID:???
どちらも正しい
0631nobodyさん2009/04/21(火) 11:00:11ID:???
CMSのテーブル構造ってどんな感じ?
0632nobodyさん2009/04/21(火) 11:18:14ID:???
DLすれば1分で分かるだろ
0633nobodyさん2009/04/21(火) 12:16:37ID:???
特定の処理を関数作って渡そうとしています。

example($sample, $sample2, $sample3);

function example($sample, $sample2, $sample3){
require_once 'test.php';
}

test.phpの中に同様に$sample 〜 $sample3があるのでtest.phpに引数として
渡したいのですが上記をどのようにすればtest.phpに$sample〜$sample3を渡すことで出来ますか?
functionに引数として渡せていることは確認しているのですが、そこから先のtest.phpへの引き渡し方が分かりません。
ご存じの方いらた是非ともアドバイスいただきたいです。
0634nobodyさん2009/04/21(火) 12:29:51ID:???
別変数にコピーするのがアドホックなやり方かな
変数名のバッティングは検出しづらいバグの温床だからかぶらないようにするべきだとおもうけど
0635nobodyさん2009/04/21(火) 12:33:02ID:???
呼び出し側のコンテクストにマージされるんだからrequire/includeに引数なんていらない。
0636nobodyさん2009/04/21(火) 12:54:10ID:???
>>633
それで渡せないの?
0637nobodyさん2009/04/21(火) 15:57:53ID:???
>>633
インスタンスなしの場合
test::hogehoge( $sample, $sample2, $sample3 );

インスタンスのコンストラクタに渡す場合
$test = new Test( $sample, $sample2, $sample3 );

インスタンスのメソッドに渡す場合
$test = new Test();
$test->hogehoge( $sample, $sample2, $sample3 );

0638nobodyさん2009/04/21(火) 16:09:32ID:???
お前は何を言ってるんだ?
0639nobodyさん2009/04/21(火) 18:42:48ID:???
633のどの辺がPerlに見えたのか知りたい
0640nobodyさん2009/04/21(火) 19:59:49ID:???
PHP勉強するときって、必須になる知識って、

(1)PHP
(2)javascript
(3)MySQL

の3つ?
0641nobodyさん2009/04/21(火) 20:04:34ID:???
いいえ
0642nobodyさん2009/04/21(火) 22:02:13ID:???
>>639
Perlの話なんて誰もしてないが。
0643nobodyさん2009/04/21(火) 22:59:06ID:???
>627
PHPはウンコだから文字列と数値を区別できない。同じ意味なので、どちらが正しいという事も無い。
PHPでそう書くと、前者の代入結果は後者で上書きされ、なかった事になる。
常識的な他の言語では、両者は別のものなので、どちらが正しいという事は無い。
$a['0']=1;
$a[0]=2;
echo $a['0']; // PHPだと2。ふつうは1。
echo $a[0]; // 2
echo count($a); //PHPだと1。ふつうは2。

>640
PHPで何をしたいかによる。
0644nobodyさん2009/04/22(水) 16:58:14ID:???
PHPで簡単なメモ帳を作成してます。
textareaに記入後はheader('Location: ./index.html');でトップ画面に
飛ばすようにしてますが、Locationの記述行数で下記のエラーが発生します。

Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\memo\memo.php:1) in D:\xampp\htdocs\memo\memo.php on line 20

headerの構文には問題ないと思うのですがどのような原因が考えられるのでしょうか。
0645nobodyさん2009/04/22(水) 17:09:14ID:???
ヘッダの前に出力してるから
06466442009/04/22(水) 17:29:09ID:???
>>645
こんなヘタレ質問に速攻で答えてもらってありがとうございます。
ヘッダの前にはfopenでファイルを開いて書き込みをしているだけなんですが
それがダメということでしょうか。
ヘッダより下に書いたら実行されないのでどうしてもヘッダの前で処理を行う必要があるのですが
出力の意味を間違ってますか?
0647nobodyさん2009/04/22(水) 17:34:17ID:???
標準出力に出さなきゃ大丈夫だよ。
ってphpの場合<?php ?>で囲まれた部分以外が先にあっても駄目だけど
06486442009/04/22(水) 17:49:39ID:???
>>647
たびたびの素早い回答ありがとうございます。
それは困りましたね。
phpの内容は
1.フォームからデータ受け取り
2.受け取ったデータを適すとファイルに追記
3.フォームに戻る ← ここでLocation
という構造になってます。
3のファイルに追記してるというのが標準出力になると思うんですが、
この場合はどうやれば元のフォーム画面に戻す事が出来るんでしょうか。
0649nobodyさん2009/04/22(水) 17:53:26ID:???
ファイルは標準出力じゃないよ

ファイル始まり
<?php
ファイル出力とかの処理

header();
?>

ってやればいいっしょ
0650nobodyさん2009/04/22(水) 17:59:37ID:???
>>647の言ってることは間違い
>>649が正解
06516442009/04/22(水) 18:07:05ID:???
>>649
回答ありがとうございます。

試しにmemo.phpを

<?php
header('Location: ./index.html');
?>

の3行だけにしてみたのですが、それでも下記のエラーが出てきました。

Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\memo\memo.php:1) in D:\xampp\htdocs\memo\memo.php on line 2

何か別の問題がありそうな気がしますが、思い当たる部分がないです。
0652nobodyさん2009/04/22(水) 18:15:01ID:???
HTTPはヘッダの後にエンティティボディがくるから、仕様上ボデー送った後にヘッダは送れない
何かヘッダの前に送出されているはずだから、それを確認してみたら
ありがちなのはメモ帳で編集しててBOMがくっついてるパターンとか

しかしiniでoutput_bufferingが指定されていれば、出力しても4kb程はバッファにたまるから大丈夫なはずなんだけどね
0653nobodyさん2009/04/22(水) 18:17:15ID:???
あと、RFCの通りLocationは絶対パスで指定するべき
0654nobodyさん2009/04/22(水) 18:20:11ID:???
>>647と>>649で矛盾してないと思うが。つか同じ人なんだけどね
0655nobodyさん2009/04/22(水) 18:28:40ID:???
つBOM
0656nobodyさん2009/04/22(水) 18:29:16ID:???
xamppではデフォルトでoutput_buffering=Offのようだ。Debug時はそのほうがいいな。
0657nobodyさん2009/04/22(水) 18:45:24ID:???
BOMで理解できるレベルじゃなさそうだが・・
0658nobodyさん2009/04/22(水) 19:16:10ID:???
googleという文明の利器があるじゃないか
0659nobodyさん2009/04/22(水) 19:38:21ID:???
header('Location: ./index.html');

ナイワwwwwwwwwwwwwwwwww
0660nobodyさん2009/04/22(水) 19:53:50ID:???
>>649
「標準出力」という言葉の意味がようやくわかった気がする。

「○○が標準出力です」

って説明よりも、

「XXは標準出力ではありません」

っていう説明のほうが理解しやすい気がする。
0661nobodyさん2009/04/22(水) 20:04:27ID:???
お前は何を言ってるんだ?
0662nobodyさん2009/04/22(水) 20:05:47ID:???
>>660の言いたいことが理解できない俺はダメダメなのか?

0663nobodyさん2009/04/22(水) 23:22:22ID:???
>>662
ファイルが標準出力じゃない ということを理解したんだよ
まあ、それで
>「標準出力」という言葉の意味がようやくわかった気がする。
というのはちょっとどうかと思うが
0664nobodyさん2009/04/22(水) 23:37:49ID:???
「標準出力はファイルである」ということも分かるようにならないとな
0665nobodyさん2009/04/23(木) 01:49:32ID:???
日本語の「標準」「出力」じゃないからw
0666nobodyさん2009/04/23(木) 08:18:13ID:???
>>651
ファイルをUnicodeで保存しているのなら、
一度、試しにEUCで作ってみるといい。
そうすると、>>655の意味が判るかもしれない。
0667nobodyさん2009/04/23(木) 10:04:50ID:???
ストリームだから戻ることができない。

標準入出力=ファイル だと信じて疑わないと躓く要因になる。
0668nobodyさん2009/04/23(木) 10:50:05ID:???
そんな脳ミソじゃ元服前に死んでるだろ
0669nobodyさん2009/04/23(木) 11:25:56ID:???
既定の入出力って翻訳すりゃよかったのに。
0670nobodyさん2009/04/24(金) 20:17:21ID:???
go-pear.phpでインストールする
pearのフロントエンドっていうのは、
public_htmlの外にインストールしなければいけないの?

でもそれだとブラウザでアクセスできなくない?

だからpublic_htmlの中にインストールして、
そこのディレクトリにパスワードでアクセス制限をかけるの?
0671nobodyさん2009/04/24(金) 20:41:30ID:???
go-pear.phpは普通コマンドラインから実行するんでないの?
0672nobodyさん2009/04/24(金) 20:44:21ID:???
レンタルサーバーにいれるとき。
0673nobodyさん2009/04/24(金) 23:33:06ID:???
>>671
そうでもない
0674nobodyさん2009/04/24(金) 23:42:03ID:???
なんで?
0675nobodyさん2009/04/25(土) 00:03:28ID:???
>>674
おまえwindowsでgo-pear.batでインストールしてるだろ?
ソース読めば?
0676nobodyさん2009/04/25(土) 00:06:23ID:???
してないけど?
0677nobodyさん2009/04/26(日) 19:46:22ID:HwIYAsBt
MySQLは6.0まで出てますが
PHPと一緒に使うために必要なバージョンはかわらないんでしょうか?
0678nobodyさん2009/04/26(日) 21:35:32ID:???
勉強しなければならないのって、
PHP、javascript、MySQL

この3つは、デフォルトでガチ。さらに、それプラス、

XML,PDF、FLASH(actionscript)

も必要だと思う。さらに
ubuntu
の知識も必要だよね。他にも何かある?
0679nobodyさん2009/04/26(日) 23:37:21ID:???
HTTPを知らんでどうする。
0680nobodyさん2009/04/26(日) 23:52:36ID:???
MySQLっつうかRDBMS。PDO経由ならどれも同じようなもんなのでどうでもいい。
同じく、UbuntuじゃなくてLinux一般の知識。つうかUnix系OSの知識。
XMLにはそもそも学ぶ事はほとんど無い。
PDFは果てしなくどうでもいい。

他に必要なのは
各ブラウザの特徴。
Apache。
PHP以外の言語なにか最低ひとつ。
■ このスレッドは過去ログ倉庫に格納されています