【PHP】質問スレッド Part6

このエントリーをはてなブックマークに追加
952 ◆Kiss.FX29M :03/02/03 22:49 ID:???
0行目のエラーってファイルが正しく開けていない場合が多い。
最終行のエラーは先日レスであったように閉じ括弧'}'忘れかな。
953 ◆Kiss.FX29M :03/02/03 23:30 ID:???
>>951
ナニが間違っているかってぇと、設計が拙いでしょ。
このままでは直ぐ破綻しそうだし、設計からやり直したほうがいいと思うよ。

LocationHeaderって、http://から書くのが正しいのだろうけど、相対指定
すると認証直後に表示しないのを回避できるんじゃないかい。

954nobodyさん:03/02/03 23:53 ID:CYAeTfgP
>>953
両ファイルとも
header("Location: xxx.php");
に変えてみましたけど、変わらず真っ白になっちゃいます。

...拙い(TT)
原因を調べるためソースを簡略化したから
...ってことではないですよね
Locationで飛ばすとことかが拙いですか?
よければそれも教えてーな
955 ◆Kiss.FX29M :03/02/04 00:35 ID:???
Locationで飛ばさずに同一ページで切り替えればいい。
まだ拙いところは残っているけど、簡単に書けばこうか。
---- pdf.php ----
<?php
require_once("login.php");
private_auth();
$filename=dirname($_SERVER['SCRIPT_FILENAME']).'/test.pdf';
header("Content-Type: application/pdf");
header("Content-Length: ".filesize($filename));
header("Content-disposition: inline; filename=".basename( $filename ) );
$size = readfile( $filename );
?>
---- login.php ----
<?php
function private_auth(){
session_start(); //<-こんなところにこれがあるのは拙いと思う。
if( $_POST['password']=="password"or $_SESSION['password_check_ok']==1 ){
$_SESSION['password_check_ok']=1;
return();
}
echo <<< __EOD__
<html><body><form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input name="password" value="password"><input type="submit">
</form></body></html>
__EOD__;
exit();
}
?>
こうしておけば、スクリプトの先頭で、require_once("login.php");private_auth();
があれば、それで認証が済んじゃうので、他のページでもそのまま使いまわしができるだろう。
956951:03/02/04 01:12 ID:gS9QQv5a
>>955
ありがとうございます。参考にして書き直してみました。
とりあえず、header('Location: xxx.php') は使わなくなりましたが
結果は変わらずです(TT)
なにが悪いんだろ
957 ◆Kiss.FX29M :03/02/04 01:34 ID:???
>>956
あれ? できないんか?
スクリプトとか間違いなしに書き換わってる?
鯖が別ならアップし忘れとか、違うところにアップしてたとか...
あと、エラーなんかでない? エラー出力レベルをE_ALLだったかな? にしてみるとか。
もしくはhttpdのエラーログになんかでているとか。
958951:03/02/04 02:08 ID:gS9QQv5a
>>957
自分で書き直したものをやめて
書いていただいたのをそのままコピー&ペーストしましたが
(ヒアドキュメント?の中の$_SERVER['PHP_SELF']をちょっと変えた)
以前と同様です。(真っ白)

/etc/php.ini は、
error_reporting = E_ALL
display_errors = On
にしましたが、変わらず真っ白です。

/var/log/http/error_log には何も追加されてないです。

ちなみに
/var/log/http/access_logで
192.168.10.100 - - [04/Feb/2003:02:04:57 +0900] "POST /work/php/dl/pdf.php HTTP
/1.1" 200 2334 "http://192.168.10.3/work/php/dl/pdf.php" "Mozilla/4.0 (compatib
le; MSIE 5.5; Windows 95)"
が最終行ですが、test.pdfのファイルサイズは2334bytesなので
なんかサーバは出力したつもりみたいです。

まだ、チェックするとこあれば教えてください。
959nobodyさん:03/02/04 04:08 ID:???
すっごく初歩的な質問ですが受け付けて貰えますでしょうか(;´Д`)

あちこちまわってみて、PHPが面白そうなのはよくわかりました。
ふとインストールして勉強してみようと思い立ったのですが、PHP、HTTPDと一緒に
SQLなるものもインストールするように書かれているのですが、SQLとはどういう役割があるのでしょうか?

ホントに初歩の初歩で申し訳無いですがよろしければお教え願いたいです。
960nobodyさん:03/02/04 04:15 ID:???
961 ◆Kiss.FX29M :03/02/04 04:50 ID:???
>>958
あぁ、IEのバグかも...
キャッシュを全てクリアしてみて。

#ヒアドキュメント内の変数表示は書換え忘れてました。スマソ
#return文で返す値が無い場合はreturn;とした方がいいかも。()なし
962名無しさんの陰謀:03/02/04 09:44 ID:???
>959
 そうですね「これから始める」ということですので、SQLに関してはひとまずおいておいた
方がよろしいのではないかと思います。
 PHPのコマンドに加えて、SQLコマンドまで覚えるのは、ちと荷が重いでしょうしね:-)

 まずは、PHPでのドライブがきちんと出来るようになってから、入出力がらみの選択肢
としてデータベースサーバの必要性が出てきたときに、初めてSQLを調べて覚えても
十分間に合うとおもいます。

 がんばってください:-)
963nobodyさん:03/02/04 10:36 ID:???
>>960
シークェルって呼び方初めて聞いた。

みなさんの周りでは、
「エス・キュー・エル」と「シークェル」
どちらで呼んでいますか?ちょっと気になりました。

# 英語圏での読みなのかな?
# GUI=グーイみたいに。
964gn355my0:03/02/04 10:55 ID:???
930 名前: デフォルトの名無しさん 投稿日: 02/12/30 12:52

「エスキューエル」なんですか?
「シーケル」なんですか?



931 名前: デフォルトの名無しさん 投稿日: 02/12/30 13:06

>>930
はじめにIBMで設計されたモデルが SEQUEL (シークェル) だそうだ。
その影響からか SQL (エスキューエル) のことも シークェル と
呼ぶ人がいる。・・・が、通ぶってるように見えてカッコ悪いので
普通に エスキューエル と発音することをオススメする。

シークェルなどと発音するお馬鹿さんを見かけたら、
お前、IBM の SEQUEL 使ったことあるんか、と小一時間・・・



932 名前: デフォルトの名無しさん 投稿日: 02/12/30 13:27

Structured English QuEry Language



933 名前: デフォルトの名無しさん 投稿日: 02/12/30 17:52

>>931
欧米では、エスキューエルでは通じないらしいですね。(どこで読んだ話か忘れたけど)
まあ、国内でしか仕事をしない人の方が多いし、外国とやりとりが発生するにしても、会話ではなく、
文書でコミュニケートすることの方が多いだろうから、問題になることは少ないと思いますが。
965nobodyさん:03/02/04 14:47 ID:???
>>963
GUI=グイじゃダメですか?
966nobodyさん:03/02/04 15:18 ID:???
SQL is not technically pronounceable in the English language.
I always find myself stuttering when I try to say it as "sequel" or "mysquell" (in the case of MySQL),
so I know it can't be pronounced, and shouldn't be, and you should say S-Q-L (es-cue-el).
Therefore it is an abbreviation. Same with FBI.
The only difference between the two is I don't see anyone calling FBI "fuh-bye!" or "fibbie!" ;-)
967959:03/02/04 15:54 ID:???
いやはや、親切にレスありがとうです。
取り敢えずはPHPの勉強から始めてみます。
それではどうもでした。
968nobodyさん:03/02/04 21:01 ID:???
>>963
GUI = ガイ
CUI = カイ
…変すぎるか? これは。
969nobodyさん:03/02/04 21:16 ID:???
>>968
ええ。 
970951:03/02/04 22:38 ID:/ng0GOKx
>>961
キャッシュクリアしてIE再起動でも同じでした。
それでいろいろ調べてみたんですが、こんなページを見つけました
http://www.fpdf.org/en/FAQ.php#3
FPDFの話みたいですが、現象は似ているようです。
英文長くてよくわからんけど、とりあえずformのmethodをGETにしたら
きちんと動くようです。ただ、アドレス欄にパスワードが
そのまま表示されるのが、ちょっとイヤだなと...
確実な方法は、
1.Acrobatをヘルパーアプリにする(ありえないと思うが...)
2.一時的なPDFファイルを作りJavaScriptでリダイレクトする
の様です(自信無し)
これ!って方法は無いように読めたんですがどうでしょ?
誰か訳して教えてくれません?
971nobodyさん:03/02/04 22:42 ID:???
>952
ご返答ありがとうございます。

今日、会社に行って同僚に「昨日のどうしてうごかんかったんやろ」って
聞いてみたら「いや、動いたで」と返されてしまい、
?マークを頭にいっぱい浮かべながら実行したら動いてしまいました。
ただ、謎なのは2000上では動作していたので、構文解析は失敗してない
と思われることです。

それでは、本当にありがとうございました。
972nobodyさん:03/02/04 22:45 ID:eOHquEJ2
あなたのビジネス強力バックアップ ビジネスアシスト社 
メールアドレス収集ソフト、DM送信ソフトなど各種宣伝用ツールを
格安でご提供いたします。
http://www.bizassist-jp.com/?ID=B0484
973nobodyさん:03/02/04 23:26 ID:???
3.PDFを生成しても、IEでは空白ページが出力されちゃう。どうして?

まず最初に、プログラムがPDFを出力した後には何も出力してないことを
確認してください。(spaceやCRコードはかまいませんです。
(訳注:not evenってなんだっけ?))
そしてexit構文ををOutput()を呼び出した直後においてみてください。

もし、それでもダメなら、貴方は「blank page syndrome」の患者なのかも
しれません。IEはAcrobat plug-in に数え切れないほどのバグを抱えており、
それはIE(訳注:Acrobatじゃないのよね?)すべてのバージョンに言えること
です。あなたが作ったアプリケーションは、現在使われている多くのIE上で
テストをするべきです(その運用がInternet上であるならば)。この問題は、
多くの場合POST methodによって引き起こされ、それを解決する良い方法が
あります。しかし、多くの場合、他の問題を引き起こすでしょう、例えば
です。GET methodなら比較的正常に動作するでしょうが、URLが長くなって
しまった時に情報が欠落してしまいます:query stringが45文字以上に
なってしまうと正常に動作しません。しかし、この制限に関しては解決策が
あります。URLの最後が.pdfならばいいのです、ですからIEを騙してやりま
しょう。この方法をやるときには、最後の部分にINPUT TYPE=HIDDENを追加
してやってみてください。
974nobodyさん:03/02/04 23:28 ID:???
これによって、PHPのセッションで新たな問題が生じるかもしれません
(使用しているHTTPヘッダーの取得に営業を及ぼします)。これについ
ては、質問5を見てください。

(訳注:???reliable=信頼できる・信用できる)manner上で使用するなら、
すべての問題を解決する方法が2つあります。

1)Plug-inの使用を止め、Acrobatをhelper applicationとして使用する
方法があります。これをすると、Acrobatを起動することになります。
その方法は、File menu → Preferences → General の
"Web Browser Integration"のチェックを外す、Acrobat 5ならば、
Edit → Preferences → Optionsの"Display PDF in Browser"と
なります。そして次に、IEでPDFを読み込んでみてください。
"Open it"や"Save it to disk"のダイアログが表示されると思います。
そこで"Always ask before opeing this type of files"のチェックを
外して開いてください。そうすれば、PDFファイルを開くと、別ウィン
ドウにAcrobatが起動して中を見れると思います。
975nobodyさん:03/02/04 23:40 ID:???
回線切られた…… つまらんことだが「営業」→「影響」

この方法では、クライアントの設定を変えるなければならないため、
Intranet 環境ならばいいのですが、Internetでは使えません。

2)Redirection techniqueを使う方法があります。PDFをサーバー上の
テンポラリファイルに出力し、クライアントにはそれを表示させる
方法です(それには、JavaScriptを使います。HTTP headerでやろうと
すると別の問題を引き起こすことでしょう)。スクリプトの最後に
以下に示すコードを追加すれば簡単に実装できます。
976nobodyさん:03/02/04 23:40 ID:???

この方法はほとんどの場合でうまくいくのですが、IE6では
依然として問題を抱えています。(訳注:???)この
「突拍子も無い方法」では、Temporaryファイルの内容を表示して
しまいます。そこで、このファイルの最後に".pdf"をつけてやれば
うまくいきます。

この関数では、今より1時間以上前のtmp*.pdfはすべて消してしまい
ます。これを使用したければ、PDFファイルを生成するスクリプトに
追加してください。

注意:別ウィンドウにPDF表示を表示させたいときにはきっと、
redirectionではうまくいかないと思います。

4.POST methodでパラメータを与えようとしても、PDFファイルが
うまく表示できません。
これは、ある特定のバージョンのIEで起こる問題です(5.5以前の
場合に多いでしょう)。この前に書いたGETの方法でやりましょう。

5. PHPのセッション機能を使うと、PDFは表示されずダウンロードするか聞いてきます。
これはある特定のバージョンのIEで起こる問題です。
うまく動作させるには、session_start()の前に次の行を
入れてください

session_cache_limiter('private');

または、質問3に示したredirectionによる方法を使用してください。
977nobodyさん:03/02/04 23:42 ID:???
ってことで、IEでは拡張子.pdfがつかないといけないという問題が
あるので誤動作するらしい。
978951:03/02/04 23:45 ID:/ng0GOKx
>>973-976
スゲー!!感動した!ありがとうー
かなり読み間違えていたことがわかって
ちょっとびっくりしました(^^;
ゆっくり読まさせていただきます。
ありがとうーー!!
979977:03/02/04 23:52 ID:???
ごめん、間違えてる気が多分にしる。TOEIC()<400故、間違いも
そして無理やりの解読もあるので、気をつけながらお読みください。 

あと、IEのみ
<META>タグでredirectionさせちゃだめ?
980 ◆Kiss.FX29M :03/02/05 02:05 ID:???
>>973-976
乙!

俺も後は5のsession_cache_limiterしかないと思ってたんだが、
4のPOSTメソッドでこけるってのは初耳だたよ。
これで、某pdfファイル取得が現状GETメソッドで今後POSTメソッドに
変更される事はないんだな。安心した。(w
981nobodyさん:03/02/05 08:16 ID:VItC7cS2
文字列をメールアドレスやURLだと判定するにはどうすればいいですか?
982 ◆375CdmmTco :03/02/05 08:42 ID:???
>981
まず、どんな文字列がメールアドレスやURLなのか?
と考えないと。
983982 ◆kaHG.XGS1s :03/02/05 08:49 ID:???
補足。
どんなものがメールアドレスorURLなのか考えたら後は
http://jp.php.net/preg_match
このあたりみれば。
984nobodyさん:03/02/05 11:42 ID:Twi3UXDY
APD ttp://apd.communityconnect.com/
"an interactive debugger" ってどうやって使うんでしょうか?
985nobodyさん:03/02/05 14:50 ID:dBDd/yMM
PHPでHTTPのPOSTメソッドを発行したいのですが、
"GET / HTTP/1.0"と通常に発行しただけだとうまく
いかないのですが、どうすればリクエストがPOSTメソッドに
なりますでしょうか。
986nobodyさん:03/02/05 15:34 ID:maVB0KjT
>>985
GETをPOSTに変えればいいんじゃないの
987nobodyさん:03/02/05 15:41 ID:???
>>985
どううまく行かないかは書かないのね。

恐らくコンテンツの長さなんだろうけど。
988nobodyさん:03/02/05 16:02 ID:qzcs3mC8
ファイルの「ファイルを作成した日時」はphpで取得できないの?
989nobodyさん:03/02/05 16:46 ID:zOPwmBVU
>>988
filectime()で出来るかもしれない
990nobodyさん:03/02/05 18:13 ID:N/1DRWYL
質問させてください。

HTMLの中にPHPファイルを埋め込む場合、
<? include ("http://www.****.com/log.php"); ?>
でPHPが正常に表示されていたのですが
さっき突然

Warning: php_network_getaddresses: getaddrinfo failed:
Temporary failure in name resolution in /home/public_html/index.html
on line 15
Warning: Failed opening 'http://www.******.com/log.php' for inclusion
(include_path='.:/usr/local/lib/php') in /home/public_html/index.html on line 15
とエラーが表示されてしまいました。

<? include ("./log.php"); ?>
のように書くと正常に表示できたのですが、
このエラーの原因は一体何なんでしょうか?
includeの中はhttp〜じゃダメなんですか。
991nobodyさん:03/02/05 18:39 ID:???
Warning: php_network_getaddresses: getaddrinfo failed:
Temporary failure in name resolution
訳してみ。
その後で疑問があればどうぞ。
992nobodyさん:03/02/05 19:09 ID:???
名前の解像度ってなんだろう
ファイル名の解像度?
ファイル名の長さ?
全角とか使ってるとだめなの?
すべてアルファベット?
どうでもいいけど戦争中って大げさ。
993nobodyさん:03/02/05 19:19 ID:???
>>992
機械翻訳使うのやめた方が良いぞ。
994nobodyさん:03/02/05 22:19 ID:???
戦争中って.. Waring?
995988:03/02/05 23:26 ID:EZlELUrL
>>989
こんなカンジでやったら取得できました

// filectime関数でtxtファイルのタイムスタンプを取得しstrftime関数でLocal時間に直しました

$UnixTime1=filectime(”C:\\Log.txt”);
$LocalTime1=strftime("%c",$UnixTime1);
echo $LocalTime1;

結果 02/02/03 14:43:47

//なお、localtime関数で日時を取得しようとすると月が1ヶ月分少なく表示されたので報告しておきます


的確な誘導ありがとうございました


996nobodyさん:03/02/05 23:32 ID:???
>>995
http://www.php.net/manual/ja/function.localtime.php
Months are from 0 [jan] to 11 [dec] and days of the week are from 0 [sunday] to 6 [saturday]
997995:03/02/06 01:17 ID:72mwYJGx
localtime関数は月と曜日が0基底だったんですね
>>996さんありがとうございました
998ゆりゅ ◆6KzN17336I :03/02/06 01:44 ID:???
>>997
まあ、なんつうか
Jan Feb ....

Sun Mon ...
って、英語表記のやつは、配列の添え字に使いやすいように
0 origin なんだそうだ。
わかりにくいだけだと個人的には思うんですけど・・・
999ゆりゅ ◆6KzN17336I :03/02/06 01:47 ID:???
・・・たまには1000めざしてもよろしい?
1000ゆりゅ ◆6KzN17336I :03/02/06 01:47 ID:???
というわけで。がんばろう。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。