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

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

ただいまの
回答率

90.34%

phpで謎の構文エラー

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,946

keys

score 195

どこがおかしいのか、いまいち掴めません、php詳しいかた、教えていただければ幸いです

 やりたいこと

phpでチャットワークのapiを叩いてphpに記述してある文字列をchatworkの部屋に文字列を送
りたい

 起こっている現象

下記のサイトを完全にコピペして、ルームidとapiを書き換え実行してみたのですが、なぜか構文エラーになり、実行ができない

http://www.sukicomi.net/2015/10/chatworkapi-postmessage.html

 試したこと

PHP Parse error:  syntax error, unexpected end of file in /var/www/html/chat.php on line 52

閉じタグを削除して、記述ミスがないか確認した

 画像

イメージ説明

 コード

<?php

// 投稿先とAPIトークンを指定
$room_id   = yyyyyy;                // ルームID。URLからも確認できます
$api_token = "******************";  // APIトークン

// メッセージ本文
$body = <<<EOD
テストメッセージでござる。
このメッセージはChatwork APIにより自動で投稿されてるでござるよ。
EOD;



// ヘッダ
header("Content-type: text/html; charset=utf-8");

// POST送信データ
$params = array(
    'body' => $body
);

// cURLに渡すオプションを設定
$options = array(
    CURLOPT_URL => "https://api.chatwork.com/v1/rooms/{$room_id}/messages", // URL
    CURLOPT_HTTPHEADER => array('X-ChatWorkToken: '. $api_token), // APIトークン
    CURLOPT_RETURNTRANSFER => true, // 結果を文字列で返す
    CURLOPT_SSL_VERIFYPEER => false, // サーバー証明書の検証を行わない
    CURLOPT_POST => true, // HTTP POSTを実行
    CURLOPT_POSTFIELDS => http_build_query($params, '', '&'), // POST送信データ
);

// cURLセッションを初期化
$ch = curl_init();

// cURL転送用の複数のオプションを設定
curl_setopt_array($ch, $options);

// cURLセッションを実行
$response = curl_exec($ch);

// cURLセッションをクローズ
curl_close($ch);

// 結果のJSON文字列をデコード
$result = json_decode($response);

// 結果を出力 (メッセージID返ってきてる)
var_dump($result);

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • miyahan

    2017/07/12 09:05

    文法ミスは無いように見えますね・・・。ちなみに投稿されたサンプルコードをコピーして新規ファイルを作り、それを実行しても同じエラーはおきますか? またOS・PHPのバージョンは何でしょうか?

    キャンセル

  • keys

    2017/07/12 10:09

    エラー、起きます。。。 PHP 5.4.1 CentOS7 です

    キャンセル

  • miyahan

    2017/07/12 11:33

    同じ環境・同じソースでエラーが再現しないので、お使いのエディタが何か悪さをしているような気がします。コード補完機能の無いテキストエディタを用意し、投稿したソースをコピペ(右上のクリップボードコピーボタンを使ってください)して UTF-8(BOMなし) / LF で保存し実行してみてください。まだエラーになるでしょうか?

    キャンセル

回答 4

checkベストアンサー

+3

11行目 EOD; の後に空白があるからではないでしょうか。
ヒアドキュメントの終わりはセミコロン以外は付けてはいけません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/12 09:33

    たしかに、シンタックスハイライトをみても、「EOD;」で抜け切れていない感じですね。

    エディタによっては「保存時に行末のスペースを全て削る」設定があるので、入れておくと便利かもしれません。

    キャンセル

  • 2017/07/12 10:07

    たしかに、それが原因かもしれません、試してみます。

    キャンセル

  • 2017/07/12 16:38

    素晴らしいご回答ありがとうございました、助かりました^^

    キャンセル

+2

閉じタグ削除はダメでしたか。
あとは気になるのは2点。
chat.phpはUTF-8のBOMなし(UTF-8N)で保存されていますか?
もうひとつ、ヒアドキュメント周りが怪しい感じですので、いったん

$body="テスト";


のような無難なコードに変えてみてエラーが出る確認してみるのがいいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

https://phpcodechecker.com/
phpコードチェッカーで検査してみましたが問題はないようです。

50行でphpコードは終了しているはずにも関わらず52行目がエラーだと言われているようですから、

?>


この終了タグを消してみて下さい。
終了タグ後の改行やスペースなどのささいな文字が問題を引き起こしている可能性があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/12 10:07

    終了タグは消してみたのですが、解決には至りませんでした...

    キャンセル

0

$options配列に定数を渡していますが、どこにも定数が指定されていません。

// cURLに渡すオプションを設定
$options = array(
$options = array(
    'CURLOPT_URL' => "https://api.chatwork.com/v1/rooms/{$room_id}/messages", // URL
    'CURLOPT_HTTPHEADER' => array('X-ChatWorkToken: '. $api_token), // APIトークン
    'CURLOPT_RETURNTRANSFER' => true, // 結果を文字列で返す
    'CURLOPT_SSL_VERIFYPEER' => false, // サーバー証明書の検証を行わない
    'CURLOPT_POST' => true, // HTTP POSTを実行
    'CURLOPT_POSTFIELDS' => http_build_query($params, '', '&'), // POST送信データ
);

ではありませんか?

あとParseエラーにはなりません。これでコード全部ですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/12 10:08

    んー、一応上記のコードが全てなのですよね...定数の部分、確認してみます

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る