質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

1919閲覧

どこが間違っていますか?-サーバーの情報をダウンロード-

b1ackc0ffee

総合スコア267

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2015/06/30 07:58

下記のコードだと、
リンクをクリックすると下記のようなエラーメッセージが表示されます。

Parse error: syntax error, unexpected '{' in C:\xampp\htdocs\php10\lesson28\download.php on line 6

自分では間違いが見つけられなかったのですが、どこが間違っていますでしょうか。
2個目のphpファイルがdownload.php です。

lang

1<?php require_once '../Encode.php'; ?> 2<!DOCTYPE html> 3<html> 4<head> 5<meta charset="UTF-8" /> 6<title>PHP入門教室</title> 7</head> 8<body> 9<h3>ファイルリスト</h3> 10<table border="1"> 11<tr> 12 <th>ファイル</th><th>サイズ</th><th>最終アクセス日</th><th>最終更新日</th> 13</tr> 14<?php 15const DOC_ROOT = '../doc/'; 16clearstatcache(); 17$o_dir = @opendir(DOC_ROOT) 18 or die('フォルダが開けませんでした。'); 19while ($file = readdir($o_dir)) { 20 if (is_file(DOC_ROOT.$file)) { 21 $path = DOC_ROOT.$file; 22 $file = mb_convert_encoding($file, 'UTF-8', 'SJIS-WIN'); 23?> 24 <tr> 25 <!--/* ここからダウンロードリンクの準備 */ --> 26 <td><a href="download.php?path=<?php print(urlencode($file)); ?>"> 27 <?php print(e($file)); ?></a></td> 28 <!-- /* ここまでダウンロードリンクの準備 */--> 29 <td><?php print(round(filesize($path) / 1024)); ?>KB</td> 30 <td><?php print(date('Y/m/d H:i:s', fileatime($path))); ?></td> 31 <td><?php print(date('Y/m/d H:i:s', filemtime($path))); ?></td> 32 </tr> 33<?php 34 } 35} 36closedir($o_dir); 37?> 38</table> 39</body> 40</html>

lang

1<?php 2const DOC_ROOT = '../doc/'; 3$flag = FALSE; 4$o_dir = opendir(DOC_ROOT); 5/* ここから--クエリ情報pathのチェック-- */ 6while ($file = readdir($o_dir)) { 7 if (is_file(DOC_ROOT.$file)) { 8 $filename = $file; 9 $path = DOC_ROOT.$file; 10 $file = mb_convert_encoding($file, 'UTF-8', 'SJIS-WIN'); 11 if ($_GET['path'] === $file) { 12 $flag = TRUE; 13 break; 14 } 15 } 16} 17closedir($o_dir); 18/* ここまで--クエリ情報pathのチェック-- */ 19if (!$flag) { die('不正なパスが指定されました。'); } 20/* ↑エラー時は強制終了 */ 21/* ここから--ダウンロード処理-- */ 22header('Content-Type: application/contet-stream'); 23header('Content-Disposition: attachment;filename='.$filename); 24print(file_get_contents($path)); 25

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

ブラウザから、意図的にありえないファイルパスを指定し、「不正なパスが指定されました。」と表示されるでしょうか?

lang

1download.php?path=1111111

もし、Parse error: syntax error, が出るようであれば、ソースに必ず文法エラーがあります。
「不正なパスが表示されました」と表示されるようであれば、../doc/フォルダの中のリストを見せていただきたいです。

Parse error: syntax error, unexpected '{'
↑のエラーは、

lang

1①のケース 2if (条件) 3 処理 4} 5

のような記述をしたときに出るエラーです。

lang

1②のケース 2if (条件) 3{ 4 処理 5

上記のようなケースだと
Parse error: syntax error, unexpected '}'
かっこの向きが逆(}) のエラーになります。

従って、①のケースが発生していると思われます。

またエラーメッセージから、download.phpファイルの6行目付近に "{" が無いというエラーです。

しかしながら、質問文のソースをコピーペーストし、
※「Encode.php」の内容が不明の為、コメント化し、print(e()); の[e]という名前の関数がエラーとなったためprint(); に変更

docフォルダに適当な画像ファイルを入れてテストしてみたところ、正常に動作しました。
また、意図的に6行目付近の"{"が無いというエラーを出させてみようと、"{"又は"}" を外してみたり、足してみたりしましたが、6行目付近でのエラーを発生させることはできませんでした。

このことから、../doc/フォルダの中に入っているファイルの名称に何かしら原因があるのではないかと推測しています。

投稿2015/07/01 03:01

KenjiObata

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b1ackc0ffee

2015/07/02 07:08

わっ ご親切に有難うございます。 実は、サーバーのバージョンがphp4だったため、constが使えなかったのが原因でした。 あと、全角スペースも入っていましたので、エディタを全角スペースは□となるようにガジェット追加しました。 有難うございました★★
guest

0

不具合を本当に見つけにいくなら、、、ですが
このぐらい小さいモジュールなら、まずは機能を絞って実行してみますね。

Directoryが開けるか?
引数がわたってるか?

<?php const DOC_ROOT = '../doc/'; $flag = FALSE; $o_dir = opendir(DOC_ROOT); closedir($o_dir); print($path); なおモジュールを修正するときは、 バックアップ取ってから実施しないと消えちゃうので注意が必要ですよ。

投稿2015/06/30 10:36

kurosawa

総合スコア780

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b1ackc0ffee

2015/07/02 07:10

少しずつコードをコメントアウトして、原因を解明するのですね^^ まだそこまでできるレベルではありませんが、できるように心がけます。 アイディア有難うございました★
guest

0

constキーワードはPHP5.3以降対応なので、それ以前のバージョンを使っているとか?

投稿2015/06/30 08:24

naga3

総合スコア1293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b1ackc0ffee

2015/06/30 08:32

回答ありがとうございます! であれば、エラーメッセージが合っているとは限らなんですねぇ。。 前回の質問も同じことが原因かもしれません。 https://teratail.com/questions/12021 どうすれば、解決するのかわかりません。 宜しくお願い致します。
naga3

2015/06/30 08:58

constの代わりに define('DOC_ROOT', '../doc/'); を使えば直るかも知れません。
b1ackc0ffee

2015/07/01 02:30

有難うございます。 リストは表示されたのですが、リンクをクリックすると、 Parse error: parse error, unexpected '{' in /home/sample/htdocs/asada/php10/lesson28/download.php on line 6 と表示されてしまいました。
guest

0

見た感じ大丈夫そうな気がするんですが・・・

投稿2015/06/30 08:15

takayukiinaba

総合スコア1158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b1ackc0ffee

2015/06/30 08:32

回答ありがとうございます! であれば、エラーメッセージが合っているとは限らなんですねぇ。。 前回の質問も同じことが原因かもしれません。 https://teratail.com/questions/12021 どうすれば、解決するのかわかりません。 宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問