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

くだすれPHP(超初心者用)5

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/11/22(土) 06:36:02ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
http://www.php.net/
http://jp.php.net/



くだすれPHP(超初心者用)4
http://pc11.2ch.net/test/read.cgi/php/1213356756/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
0671nobodyさん2009/02/04(水) 17:25:29ID:???
>>670
imagecreatefromjpeg
にしてみたら?
それで、$imがfalseになってないかチェック
それから、imageやheaderを出力する前に余計な出力をしないように、ソースの冒頭でob_startして、直前で破棄

0672nobodyさん2009/02/04(水) 17:39:12ID:???
ところで皆さんPHPとMYSQLは勉強し始めて
どれくらいの期間で使えるレベルになりましたか?
0673nobodyさん2009/02/04(水) 17:41:17ID:???
使うだけなら書籍読みつつ1日でカバーできる範囲
使いこなすまでは相当かかったが
0674nobodyさん2009/02/04(水) 17:50:34ID:???
>>670
「image.jpg」→「"image.jpg"」
0675nobodyさん2009/02/04(水) 18:10:51ID:???
"imagejpg"になってたりするのか
0676nobodyさん2009/02/04(水) 18:32:32ID:???
そもそもcreateimagefromjpegなんて標準関数はないわけだが
imagecreatefromjpeg(string $filename)ならあるけど
0677nobodyさん2009/02/04(水) 18:33:11ID:???
単純にサーバにGDライブラリがはいってないだけなんじゃね?
phpinfoみてみれ
0678nobodyさん2009/02/04(水) 18:37:31ID:???
>>677
>>666
0679nobodyさん2009/02/04(水) 18:37:52ID:???
>>676
>>671
0680nobodyさん2009/02/04(水) 18:38:31ID:???
書いたとおりに載せないで情報小出しにしてる時点でもう答えようがない
0681nobodyさん2009/02/04(水) 18:38:39ID:???
要するに釣り
06826662009/02/04(水) 20:04:43ID:???
お騒がせ致しました

釣りではないのです

広告自動表示のレンタルサーバーを使用していたためにうまくいかなかったようです

広告無しのサーバーでは問題なく表示できました。

ありがとうございました
0683nobodyさん2009/02/04(水) 22:08:23ID:???
広告自動挿入のサーバーだと
ヘッダー情報ってだめなの?
0684nobodyさん2009/02/04(水) 22:09:01ID:???
PHPの講師やりたいんだけど、
どこの学校がおすすめ?
0685nobodyさん2009/02/04(水) 22:31:36ID:???
学校行ってまでPHP学びたいと思うか?
0686nobodyさん2009/02/04(水) 22:37:41ID:???
>>685
だって一日で20万もらえるってよ
バカらしくてコーダーなんかやってられないよ
0687nobodyさん2009/02/04(水) 22:41:25ID:???
SQL(SQLite)なんですが単対多のデータを取得したら
|A|a|1|
|A|a|2|
|A|b|1|
|A|b|2|
|B|c|1|
|B|d|1|
みたいになるじゃないですか。
重複した項目をまとめて(A,(a,b),(1,2)),(B,(c,d),1)な感じにする関数てあるんでしょうか。
0688nobodyさん2009/02/04(水) 22:46:57ID:???
>>685
http://pdoj.wordpress.com/2009/02/04/fetch-modes/

とりあえず翻訳やってみたけど、どう?
0689nobodyさん2009/02/04(水) 22:50:36ID:???
>>687
pdoとかMDBとかにあるよ
sqliteは知らんけど
0690nobodyさん2009/02/04(水) 22:52:37ID:???
>>688
ドキュメントの翻訳で「〜と思う」なんて普通使わない
0691nobodyさん2009/02/05(木) 00:20:18ID:???
>>689
ありがとうございます。
探したらfetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)がそれらしいです。
ただマニュアルの例で例えると
array(3) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
みたいな感じにカラム0の値しか取得できてないようです。
自分がどこか間違ってるのかSQLiteが対応してないのか...
もう少し試してみます。
0692nobodyさん2009/02/05(木) 00:47:17ID:???
>>691
ほい
http://jp2.php.net/manual/ja/pdostatement.fetchall.php
0693nobodyさん2009/02/05(木) 00:49:12ID:???
$str = '4,980 円';

↑みたいなフォーマットの価格データを整数値にしたいんだけど
↓よりシンプルにやる方法ってある?

$str = str_replace(array(' ', ',', '円'),array('', '', ''),$str);
0694nobodyさん2009/02/05(木) 00:51:20ID:???
$str = (int)str_replace(',','',$str)
0695nobodyさん2009/02/05(木) 00:54:43ID:???
ありがとうg
0696nobodyさん2009/02/06(金) 21:22:00ID:???
>>692
MySQLでも試してみたのですが結果は同じでサンプルのような結果にならないのですが
どこか捉え違いしているのでしょうか。
PHP 5.2.6/MySQL 5.0.4
|apple|red|
|banana|yellow|
|apple|green|
という内容として、
$dbh = new PDO('mysql:〜','root','root');//もしくは'sqlite:〜'
$sql = "SELECT name,color FROM table1";
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0);
var_dump($result);
$stmt = null;
結果
array(2) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
["banana"]=>
array(1) {
[0]=>
string(6) "banana"
}
}
となります。
0697nobodyさん2009/02/06(金) 21:29:26ID:???
サンプルのような結果と言われても、サンプルのような結果がどんなもんだかわからんからね。

とりあえず、FETCH_GROUPなんだし、結果が正しいように思うが?
0698nobodyさん2009/02/06(金) 21:34:36ID:???
まぁ、試しに
PDO::FETCH_COLUMN|PDO::FETCH_GROUP
じゃなく
PDO::FETCH_ASSOC|PDO::FETCH_GROUP
にしてみたら?
0699nobodyさん2009/02/06(金) 21:39:06ID:???
>>697
失礼、サンプルは>>692にもあるPDOStatement->fetchAllの例3です。
期待した結果は
["apple"]=>
array(2) {
[0]=>
string(5) "red"...
なんですが、>>696が正しいということはやっぱりなにか勘違いしてるのかなぁ
0700nobodyさん2009/02/06(金) 21:43:25ID:???
あぁそれか、fetchAllの第2引数に0が入ってるじゃん、だから、カラムが制約されてる
それ、外したらどうなる?
0701nobodyさん2009/02/06(金) 21:48:42ID:???
array(2) {
["apple"]=>
array(2) {
[0]=>
string(3) "red"
[1]=>
string(5) "green"
}
["banana"]=>
array(1) {
[0]=>
string(6) "yellow"
}
}

になったけど
0702nobodyさん2009/02/06(金) 21:49:22ID:???
ああすまん本人じゃなくて俺の環境でやったらってことね
0703nobodyさん2009/02/06(金) 22:07:01ID:???
>>700
あれ?どうも。0がなくてもうまく取得できなかった気がしたんですが
今0を外したらPDO::FETCH_ASSOC|PDO::FETCH_GROUP同様うまくいきました。
|PDO::FETCH_GROUPがついたときは第2引数で指定したPDO::FETCH_COLUMNを基準に
グループ化するのかと勘違いを…
実際は複数のカラムが必要なのでPDO::FETCH_NUM|PDO::FETCH_GROUPで
思った通りの結果が得られるようになりました。ありがとうございました。
>>701も確認ありがとうございます。
0704nobodyさん2009/02/06(金) 22:11:15ID:???
fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0); で普通に取得できたが?
後進のために原因を明らかにしといてくれ
0705nobodyさん2009/02/06(金) 22:21:43ID:???
>>704
もし、第2引数に0が入ってても第2カラムを取得できたんならバグだと思うよ
0706nobodyさん2009/02/06(金) 22:26:54ID:???
お前は何をいっちょるんだ?
第2引数に0を入れるということは1番目のCOLUMNを用いて残りのカラムをGROUP化するってことだぞ
0707nobodyさん2009/02/06(金) 22:29:53ID:???
>>778
何も問題ないが
0708nobodyさん2009/02/06(金) 22:30:55ID:???
すまん誤爆した
0709nobodyさん2009/02/06(金) 22:57:48ID:???
>>706
デマ書いてすまん、よくわかってなかった。
そのはずだよねぇ。
0710nobodyさん2009/02/08(日) 19:09:17ID:???
<?php
try {
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

fntest();
function fntest() {echo "call function";}

} catch (ErrorException $exception){
echo "何かエラーだよ<br />";
echo $exception->getMessage()."<br />";
echo "line:".$exception->getline();
exit();
}
?>
これを実行するとFatal error: Call to undefined function fntest() in〜と出ます
定義を先にするかtry〜catchをなくすとエラーは出ません
何がいけないんでしょうか
0711nobodyさん2009/02/08(日) 19:26:17ID:???
定義が後でtry〜catchの中だからでは?
0712nobodyさん2009/02/08(日) 20:00:14ID:???
>>711
まんまやん というかだめなんですか?
>次の二つの例のように、ある条件下でのみ関数が定義される場合には、その関数定義は関数がコールされる前に行われていなければなりません。
に当てはまるということでしょうか
とりあえずそういうものだということで前方で定義するようにします
0713nobodyさん2009/02/08(日) 20:00:15ID:???
>>710
いったいどうしたらそういう書き方ができるのか知りたいわ
0714nobodyさん2009/02/08(日) 20:35:03ID:???
Perlから入った奴なんかはそういう書き方をする事があるな。
Perlは書き方によっては、関数の宣言や定義より先に呼び出しが来てもちゃんと動く。
0715nobodyさん2009/02/08(日) 21:05:08ID:???
PHPだって、パース対象がグローバルなら、普通にfunctionの後置定義は有効だよ。
ifやwhileやtryやfunctionの中などの節の中は後置できないだけ。

>>710なんてそんなの百も承知で釣り質問してるに決まってるだろ。
釣られてへぼい回答してんじゃねぇぞ
0716nobodyさん2009/02/08(日) 21:07:39ID:???
ツン?
0717nobodyさん2009/02/09(月) 00:04:48ID:???
PHPとMySQLで学習用のWEBシステムを作っているのですが

' % 等のDBにとっては迷惑な文字列が入力された場合に、それとHTML上の特殊文字に変換する
にはどうすれば良いですか?

簡単な掲示板を作ったのですが' %が入力された場合にエラーが発生し困っています。
0718nobodyさん2009/02/09(月) 00:12:47ID:???
基礎中の基礎すぐる
0719nobodyさん2009/02/09(月) 08:41:31ID:???
>>717
mysql_real_escape_string
addslash
0720nobodyさん2009/02/09(月) 08:53:51ID:???
addslash ? syntax error
0721nobodyさん2009/02/09(月) 09:16:28ID:???
データーベースにデーターをつっこむ直前に
データーベース専用のエスケープ処理をするのが普通
0722nobodyさん2009/02/09(月) 09:20:54ID:???
データー(笑)
0723nobodyさん2009/02/09(月) 21:42:26ID:???
>717
使える箇所ならプリペアドステートメント。これが一番安全。
ttp://jp2.php.net/manual/ja/mysqli.prepare.php
ttp://jp2.php.net/manual/ja/pdo.prepare.php

使えない箇所ならmysql_real_escape_stringなど。
どの文字が危険かはDBによって違うので、MySQLにはMySQLの、OracleにはOracleの、SQLiteにはSQLiteの専用の関数がある。
0724nobodyさん2009/02/11(水) 12:21:22ID:???
htmlの<base>のようにユーザのトップディレクトリを指定したいんですが、
ユーザのトップディレクトリを調べる方法はありますか?
0725nobodyさん2009/02/11(水) 13:56:50ID:???
環境は?OSとか
0726nobodyさん2009/02/11(水) 14:12:44ID:???
>>725
ああすみません。
開発環境はPHP5.2.6でOSXなんですがWebサーバはまだ借りてないのでどうなるかはわかりません。
PHP5でApachサーバのところを借りようとは思ってます。
なので開発環境との違いや引っ越し時のことを考えて汎用的な関数がないかと質問しました。
一応マニュアルのファイルシステム関数は目を通したんですが…
0727nobodyさん2009/02/11(水) 14:24:23ID:???
exit()ってスクリプト終了のために多用してもいいのでしょうか?
たとえばエラーチェック時にdieの代わりに自作関数呼び出して終了みたいな場合など

function return_json($flag, $data){
 if($flag == true)
  $result = $data;
 else
  $result = "ERR:".$data;
 $res = array(
  "status" => $flag,
  "result" => $result );
 print(json_encode($res));
 exit();
}

if(エラーチェック1) return_json(false,"エラー1です"); //エラーなら終了

if(エラーチェック2) return_json(false,"エラー2です"); //エラーなら終了

//最後に
return_json(true,"成功です。");
0728nobodyさん2009/02/11(水) 14:33:34ID:???
別にいいんでは?
0729nobodyさん2009/02/11(水) 15:13:35ID:???
関数はあくまで何かを返すだけにして、制御を握っているのは「メインのルーチン」ひとつにした方がいい。
あちこちの関数で好き勝手に処理を中断したり画面出力してたりすると、そのうち管理しきれなくなる。
同じ理由で、printするよりは文字列を返す(printは「メインのルーチン」で行なう)方がいいと思う。

俺ならreturn_json()はjsonを返すだけ(exitもprintもしない)にして
function generare_json(){
 if(isError1()){
  return return_json(false,"エラー1です");
 }
 if(isError2()){
  return return_json(false,"エラー2です");
 }
 return return_json(true,"成功です。");
}
とし、echo generate_json()を最後に呼び出す。
exit()はスクリプトの末尾のみ、出力はこの文のみになる。
0730nobodyさん2009/02/11(水) 15:20:37ID:???
つうか、正しいjson出力とエラー出力を別の関数にするかな。
boolを渡すより、return_error_json()の方が分かりやすい。
0731nobodyさん2009/02/11(水) 15:23:03ID:???
>>719
ヒントをサンクス。

>>723
詳しいありがとうございます。
参考にさせて頂きます。
0732nobodyさん2009/02/11(水) 17:07:46ID:???
>>726
ああもしかして、http://〜/~user/ の部分の実ディレクトリが知りたいってこと?
0733nobodyさん2009/02/11(水) 17:30:07ID:???
実ディレクトリでいいのかな?ローカルでいえば
/Applications/MAMP/htdocs/
となります。
実行ファイルがトップにあるわけではないので相対パスでのファイル指定より
基点からの絶対パスのほうがわかりやすいかなと。
0734724,7332009/02/11(水) 17:31:27ID:???
>>732
アンカーわすれてたので念のため
0735nobodyさん2009/02/11(水) 17:45:24ID:???
>>733
dirname(__FILE__) とか getcwd() とか

そういうこと?
0736nobodyさん2009/02/11(水) 17:47:36ID:???
>>733
$_SERVER['DOCUMENT_ROOT']
0737nobodyさん2009/02/11(水) 18:00:00ID:???
ユーザー関係ないじゃんw
0738724,7332009/02/11(水) 19:15:46ID:???
>>735,736
$_SERVER['DOCUMENT_ROOT']で希望のパスを得ることができました。
ありがとうございました。
07397272009/02/12(木) 16:10:42ID:rITuikA6
>>729
それだとプログラム毎にgenerare_json()を書き換えるって事ですよね
(エラーチェックは入力値が対象なのでプログラム毎に変わるから)
if〜elseのネスト地獄に陥りたくないので、if文でエラーなら残りをすっ飛ばしたいだけなのです。
それとメインルーチンのほとんどがgenerare_json()内に入ってしまうような・・・

他の方法(関数内でprintもexitもなし)だと
1.エラー時、gotoでメインルーチン末尾に飛んでprint実行
2.フラグを用意し初期値true、エラー時falseにして、if(!フラグ && isError2())と毎回チェックする
3.例外処理
が思い浮かんだんですが、gotoはv5.3からだし、2は毎回チェックが煩わしい(スマートじゃない)、
3の入力値チェックのエラーは例外とは違う気がしたり・・・

それとも例外として処理してもいいのかな・・・?
チェック用自作関数は真偽を返すのでif文でエラーならthrowとか
07407272009/02/12(木) 18:57:04ID:???
連投ですみません。
色々調べたら入力値チェックで期待しない値は異常なエラーとして例外処理してもよい、
みたいに書いてあったので例外処理することにしました。

function throw_except($msg){
 throw new Exception($msg);
}

try {
 if( isError1() ) throw_except('エラー1');
 if( isError2() ) throw_except('エラー2');
 return_json( $xxx );
} catch ( Exception $e ) {
 return_err_json( $e->getMessage() );
}

例外処理になったからreturn_xxx関数内でprintさせてます(exitは削除)
print文を関数外に出した方がいいのかもしれませんが
0741nobodyさん2009/02/12(木) 19:05:55ID:???
なんで「throw_except」←関数化してんの?
0742nobodyさん2009/02/12(木) 19:11:40ID:???
毎回throw new Exception($msg);と書くのがめんどくさいので
0743nobodyさん2009/02/12(木) 20:08:20ID:???
isError1()とisError2()側でthrowしろよ(まぁ関数名おかしくなるから変えて)
try {
isError1();
isError2();
return;
} catch (isError1Excetion $e) {
} catch (isError2Exception $e2) {
}
0744nobodyさん2009/02/12(木) 21:20:57ID:???
isErrorをtryはせんだろうw
07457292009/02/12(木) 23:45:53ID:???
>739
if else地獄?>729のコードにはelseが一行も出てないだろ。これは偶然そうしたんじゃなくて、意識してそうデザインしたんだ。
適切な規模で関数を切って、returnでエラーを通知可能にすればelseは削れるし、多くの場合throwは不要になる。

すぐthrowを使いたがる奴は、GOTO時代と脳の構造が一緒の、OOPどころか関数指向にすらなれない原始人。
ぱっと思いつく欠点挙げてやろうか。throwだと妥当性検証エラーの結果を最初のひとつしか出力に反映できない。
他にも、どこまで処理が継続するのか、どこからの処理はすっ飛ばされうるのかを判定しにくいのも例外の欠点。
ロックファイルを作って、ファイルに書き出して、さあ安心と思ったら変なところから例外が飛んできて、ロックファイル削除せずに終了、とかな。
例外は、複数の呼び出し階層をぶっ飛ばして上位層にエラーをダイレクトに通知したい場合に使うものであって、GOTO代わりに使うものじゃない。

>729のコードの完成版 ttp://gist.github.com/62642
isError1とisError2の中身を替えれば、チェックする内容はそのまま置き換わる。
両者をまとめて関数化してしまえば追加も可能。generate_jsonはノータッチでいける。

入力値検証らしい構造に書き直した版 ttp://gist.github.com/62643
入力値チェックの内容が変わる場合、validate関数を差し替える。処理内容が複雑ならisError1みたいな関数を書いてvalidateから呼んでもいい。
07467392009/02/13(金) 00:56:29ID:???
ヒートさせてしまって&作例してもらって申し訳ないm(_ _)m

if else地獄というのは>>729のコードではなく(>>727の)自作関数内でexitしない場合のこと。
(一応自分でも>>727>>740で意図してelse使わないようにしてます)

ただ作例だとisError1,isError2,validate,build_responceなど関数自体を毎回書き直す羽目になるし、
メインルーチンがほぼ丸ごと関数化(build_responce)してるのもどうも・・・

関数は一度作ったら修正したくない、極力同じような文を書きたくない、ってのが元々の理由なので。

今作ってるのは妥当性エラーは1つ(というか「入力値が間違ってる」だけ)でいいのですっ飛ばしてます。
通常の入力ではなく意図的に変更してる場合しかありえないので。

確かに原始人と思いますが、GOTOも上手く適度に使えばいいんじゃないんでしょうか?
反GOTO教信者ではないし。

まあバリデーションにthrowの使うのは>>739にも書いたけど微妙だとは思いますが↓のようにあったので使ってみました
http://takagi-hiromitsu.jp/diary/20051227.html
>>パス名を受け取ることを想定したパラメタに「../」や「..\」が含まれていたら、削除とか変換をするのではなく、
>>エラーとして例外処理して終了するというのが、本来のそのプログラムの正しい動作だろう*5。

クライアント側でもチェックしてるのでそれをわざわざ変更して送ってくるのは上記にあてはまるかと。
0747nobodyさん2009/02/13(金) 01:41:35ID:???
初心者相手なんで一応言っておくと、後者のコードは検証ルールが変わっただけなら書き換えないといけない関数はひとつ(validate)。
グローバル空間の処理や他の関数は一切触れなくて平気。
グローバル空間の処理を書き換える方が、関数を書き換えるより簡単だって言い張るならもう何も言わん。ダイクストラ以前の時代に帰れ。

「メインルーチンがほぼ丸ごと関数化してる」のは、確かに設計としては甘い。
本来は、「100%すべてを関数化すべき」だしな。
07487462009/02/13(金) 02:05:40ID:???
あー、でもとりあえず作例他ありがとです。
参考にして勉強させていただきます。
0749nobodyさん2009/02/13(金) 11:16:46ID:???
質問です。
現在、PHP4を使って携帯サイトを作っています。
新規登録してログインして日記みたいなのを登録するシステムなんですが、
ログインした後の日記登録の部分は問題なく動作します。
ところが新規登録のところで動作がおかしい部分があるのです。

動作確認はdocomo,au,softbankの実機とPC上のエミュで行っています。
現象はsoftbankの実機のみで起こるのですが、スクリプトでは
header("Location:xxxxxx.php?id=xxxxx")でページを飛ばすところで問題が起きます。
docomo,au実機、PC上の3キャリアのエミュでは問題なく動作、ところがsoftbankの実機のみ
ページが飛ばずに「このページは開けません」みたいなエラーが出ます。
ソースレベルでは、その他の日記登録などとほぼ同じなのですが・・・。
softbank携帯だけ、何か仕様が違うのでしょうか?ちなみにセッションを使っています。
0750nobodyさん2009/02/13(金) 11:18:06ID:???
↑に追記です。
飛び先のphpスクリプトにダイレクトに接続した場合、問題なく動作する事は確認済みです。
0751nobodyさん2009/02/13(金) 11:24:03ID:???
さらに追記です。うざくてすいません・・・
header Locationで飛ばさずに、aタグを使って間にワンクッション置く(クリックさせる)と正常に動作します。
どのみち、その先でまたheaderで飛ばすところで駄目なんですが・・・。
0752nobodyさん2009/02/13(金) 11:45:37ID:???
>>749-751
> softbankの実機のみページが飛ばずに「このページは開けません」みたいなエラーが出ます。

このときの、サーバーに残るアクセスログは?

んで、Locationで指定しているURLはドメイン込のフルパスで書いてるよね?
0753nobodyさん2009/02/13(金) 11:52:57ID:???
サーバーのアクセスログは見る権限がないので、ちょっと頼んで調べてみます。
Locationには絶対ではなく、相対アドレスで指定しています。
0754nobodyさん2009/02/13(金) 12:03:26ID:???
人力検索(笑)
http://www2.developers.softbankmobile.co.jp/dp/tool_dl/download.php?docid=119
これの、143ページ
0755nobodyさん2009/02/13(金) 12:05:58ID:???
サーバーのログを見ると、302が返ってきているようです。
要求しているURLは、変ではなくアクセス出来るURLでした。
0756nobodyさん2009/02/13(金) 12:09:54ID:???
302はLocationヘッダーを飛ばした時のログでしょう。
その直後に正しいリクエストが来てるかどうか。
0757nobodyさん2009/02/13(金) 13:01:14ID:???
同じリクエストを数回繰り返しているだけでした。
0758nobodyさん2009/02/13(金) 13:46:02ID:???
>754
PDFの資料、大変役に立ちました。
locationで指定しているアドレスを相対から絶対にしたところ、動作しました。
ありがとうございました。
でも、他の部分では相対にもかかわらず正常動作しているんですけどね・・・。
やはり携帯サイトは難しいです。
0759nobodyさん2009/02/14(土) 13:18:20ID:???
RFCだと絶対URL(absoluteURI)になってますね

rfc2616の14.30 Location
原文
http://tools.ietf.org/html/rfc2616
和訳
http://www5b.biglobe.ne.jp/~type-aya/rfc/rfc2616j.txt
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec14.30

ソフバンの方が厳密に仕様に沿っているんでしょう
0760nobodyさん2009/02/18(水) 18:43:17ID:???
URLでファイル名やディレクトリを暗号(?)のようにするのはどうやって
いるのでしょうか?
例えば、認証するサイトでパスワード変更の時、応答メールで、
ttp://hoge.co.jp/mail/CSDFG365
へアクセスをすれば作業完了という場合の、CSDFG365や
ダウンローダーでttp://hoge.co.jp/download/CSDFG365にアクセス
すると、別名のファイル名が保存できる機能が、どう実装されているのか
知りたいのです。検索キーワードが悪いのか、ファイルの暗号化ソフト
ばかりヒットして解らずにいます。
どなたか教えてください。
0761nobodyさん2009/02/18(水) 19:28:28ID:???
それをキーにしてどっかから引っ張ってきてるのでは?
0762nobodyさん2009/02/18(水) 19:45:41ID:???
>>760
暗号ではなくユニークキー
0763nobodyさん2009/02/18(水) 23:18:25ID:???
前者は
アカウント情報とそのキーを一緒にDBかなんかに突っ込んでおく
アクセスがあったらアカウントを有効にしてそのキーを削除する

とやってるだけ。
その文字列とあなたのアカウントIDやメールアドレスに直接の関係(例えば、メールアドレスを「暗号化」するとその文字列になるとか)
はないと思うし、むしろあったら設計として不味い。

後者も、文字列と実際のファイル名なりデータなりを関連付けるDBを保持しているだけ。
ダウンロードさせるファイルの名前はヘッダで指定できる。Content-Dispositionでぐぐれ。
0764nobodyさん2009/02/18(水) 23:18:58ID:???
質問です。

皆さん、日記やブログを作るときどのような感じでスクリプトを組んでいますか?
例えばhtml文字をエスケープして、マジッククォートを取り除いて…といった形で教えてくださるといいんですが。
0765nobodyさん2009/02/18(水) 23:38:29ID:???
ぐぐれよ
0766nobodyさん2009/02/19(木) 11:06:34ID:???
>760
mod_rewriteを使ってるんだろうね。
0767nobodyさん2009/02/19(木) 12:40:19ID:???
それのどこにmod_rewriteが必要なんだよw
0768nobodyさん2009/02/19(木) 18:38:41ID:???
いや、hoge.co.jp/mail/CSDFG365 ←このアドレスの事をいったんだ。
暗号云々ではない。ズレてしまって申し訳ない。
07697602009/02/19(木) 22:42:44ID:???
みなさんありがとうございます。
パラメータをディレクトリとしていたんですね。
mod_rewriteを使って解釈しないといけないので、ズレていないと思いますよ。
使わずにすむ方法は思いつかないんですが・・・。
助かりました。ありがとうございました。
07707602009/02/19(木) 22:50:42ID:???
連続ですみません。もう一つ関連(?)でわからないことがありまして。
ダウンローダーとか、宅ファイル便とかだとファイルの公開日というのが
指定できるのですが、その指定した日時まで公開というのはどう実装するので
しょうか。ユニークキーと期日を保存して、その期日にユニークキーを
削除すると思うのですが、「その期日」に動作される方法が解らないのです。
教えて君ですみませんが、どなたかアドバイスください。お願いします。
■ このスレッドは過去ログ倉庫に格納されています