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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

2618閲覧

laravel に maxiGos(囲碁の碁盤表示javascriptツール) を導入したい

taro_nii_chan

総合スコア207

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/07/15 15:07

編集2017/07/16 09:17

#前提・実現したいこと
laravel を使って 囲碁のQ&Aサイトを作りたいと思っています。
その導入として laravel の基本的な掲示板の作り方を学ばなければいけないと思ってます。(と言うくらいのlaravel入門者です)
それと並行して、PHP で書かれた囲碁の碁盤表示 javascirpt ツール「maxiGos」を使いたいと思っています。
maxiGos
http://jeudego.org/maxiGos/
で入手でき、zipをダウンロードして解凍し、htdocsなどのドキュメントルート以下に配置することで該当ページに碁盤を表示することが出来ます。

#出来てること
MAMP (apacheで動いている) の htdocsmaxiGos ディレクトリを作り、ダウンロードして出来た _maxiGos ディレクトリ以下をコピペします。index.html

html

1<!DOCTYPE html> 2<html> 3<head> 4</head> 5<body> 6<h1>maxiGos</h1> 7<script src="_maxigos/_mgos/sgfplayer.php"></script> 8</body> 9</html>

として
http://localhost/maxiGos/
にアクセスすると、碁盤が表示されます。つかみはOK。

#やってみたこと
同様に、laravel (nginxで稼働) 配下で作成した
/Users/taro/development/laravel/maxiGos (http://maxigos.dev/ でアクセス可能)
ディレクトリのpublic_maxiGosを置いて、
route/web.php

php

1Route::get('maxiGos', function () { 2 return view('index'); 3});

を追加し、resources/view/index.blade.php

php

1<!DOCTYPE html> 2<html> 3<head> 4</head> 5<body> 6<h1>maxiGos</h1> 7<script src="_maxigos/_mgos/sgfplayer.php"></script> 8</body> 9</html>

を作成します。この状態でブラウザでhttp://maxigos.dev/maxiGosを見てもmaxiGosと表示されるだけで碁盤は表示されません。laravelには_maxigos/_mgos/sgfplayer.phpがどこにあるのか分からないからではないかと思っています。
そこで、laravelに教えてあげるために、route/web.php

php

1Route::get('_maxigos/_mgos/sgfplayer.php', function() { 2 ob_start(); 3 require(public_path("_maxigos/_mgos/sgfplayer.php")); 4 $jsCode = ob_get_contents(); 5 ob_end_clear(); 6 return response($jsCode); 7 // ->header('Content-Type', 'text/javascript'); 8});

を追加してみました。

ちなみにsgfplayer.phpの中身は

php

1<?php 2// maxiGos v6.57 > sgfplayer.php 3header("content-type:application/x-javascript;charset=UTF-8"); 4include_once("../_php/gosLib.php"); 5$sgf=(isset($_GET["sgf"])?$_GET["sgf"]:(isset($_POST['sgf'])?$_POST['sgf']:"")); 6$cfg=(isset($_GET["cfg"])?$_GET["cfg"]:(isset($_POST['cfg'])?$_POST['cfg']:"")); 7$mxL=(isset($_GET["mxL"])?$_GET["mxL"]:(isset($_POST['mxL'])?$_POST['mxL']:"")); 8$plc=(isset($_GET["plc"])?$_GET["plc"]:(isset($_POST['plc'])?$_POST['plc']:"")); 9$inc=(isset($_GET["inc"])?$_GET["inc"]:(isset($_POST['inc'])?$_POST['inc']:"")); 10print gosStart($sgf,$cfg,$mxL,$plc,$inc);

となっているので、route/web.phpの中のheader関数はコメントアウトしてみました。

#発生している問題・エラーメッセージ
この状態でブラウザをリロードしてもやはりmaxiGosと表示されるだけです。
試しに直接http://maxigos.dev/_maxigos/_mgos/sgfplayer.phpを打ってみたところ、

Whoops, looks like something went wrong. (1/1) ErrorException include_once(../_php/gosLib.php): failed to open stream: No such file or directory in sgfplayer.php (line 4)

#試したこと
laravelgosLib.phpの場所が分からないのかと思い、route/we.php

php

1Route::get('_maxigos/_php/gosLib.php', function() { 2 ob_start(); 3 require(public_path("_maxigos/_php/gosLib.php")); 4 $phpCode = ob_get_contents(); 5 ob_end_clear(); 6 return response($phpCode); 7});

などと勝算もなく試してみましたがエラーは変わりませんでした。

#お聞きしたいこと
碁盤が表示されないのはgosLib.phpがどこにあるのかlaravelが分からないからという憶測は正しいのでしょうか?もしそうであるのなら、教えてあげ方を教えてください。

そうでなく他に問題があるのでしたらそちらも教えて下さい。

#補足情報(言語/FW/ツール等のバージョンなど)
macOS Sierra バージョン10.12.5
Laravel 5.4

$ php -v
PHP 7.1.1 (cli) (built: Jan 23 2017 15:09:57) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

$ valet -v
Laravel Valet 2.0.4

$ nginx -v
nginx version: nginx/1.12.0

#蛇足
laravelについてはlaracastの英語のチュートリアル動画を頑張って観てみてます。それだけだと苦しいのでlaravel 5.1の分厚い本を買いましたが、バージョンの違いで割りと役に立たず、「出版されてる一番マシだと思われる本でもこの状態か」と納得することで逆に精神安定剤になっています。後はググるかteratail先生に頼るかなので、今にも心折れそうになりながら勉強してます。応援よろしくお願いします。


追記 (2017.7.16 18:17)

まず、上手く行ってる MAMPでどう見えるかを確認しておきたいと思います。
ブラウザでhttp://localhost/maxiGos/を表示させると、

MAMP

こんな感じに表示されます。デフォルトで選ばれる木目の碁盤が表示されることが分かると思います。

とにかく laravel で碁盤を表示させる

次の目標はhttp://maxigos.dev/maxiGosで同様に碁盤が表示されることです。
laravelgosLib.phpの場所を知らないのかと思い、route/web.phpを色々と試していたのですがそれは辞め、sgfplayer.phpの4行目の

php

1include_once("../_php/gosLib.php");

php

1include_once("_maxiGos/_php/gosLib.php");

と書き換えてあげました。
これでも碁盤は表示されないのですが、
http://maxigos.dev/_maxigos/_mgos/sgfplayer.php
を見ると、

Whoops, looks like something went wrong. (1/1) ErrorException include(_sample/neo-classic/_cfg/basic.cfg): failed to open stream: No such file or directory in gosLib.php (line 60)

とエラーが表示されました。これでgosLib.phpが見えたことが確認できました。
その60行目というのが

php

1 else include($gosRootRelativePath."_sample/neo-classic/_cfg/basic.cfg");

であったので、試しにその前に

php

1 dd($gosRootRelativePath);

を挿入してみると、長いjavascriptと思われるソースのようなものの最後の方に

html

1<span class=sf-dump-const>null</span>

と記述されていました。そこで、上のddの前に

php

1 $gosRootRelativePath = '_maxiGos/';

と明示的に代入してやったところ、

html

1<span class=sf-dump-str title="9 characters">_maxiGos/</span>

に変わりました。
この状態でブラウザをリロードすると、ついに

laravel

と碁盤が表示されました。
大進歩です。

Q1) sgfplayer.phpの4行目、_maxiGox/../ではいけないのは何故でしょう?

碁盤が白黒(木目じゃない)のは?

見てお分かりのように、MAMPだと木目調なのですが、laravelでは白黒です。
http://maxigos.dev/_maxigos/_mgos/sgfplayer.php
のはき出すjavascriptの中に

javascript

1mxG.AddCss("_sample/neo-classic/_css/basic.css");

とあるので、
http://maxigos.dev/_maxigos/_sample/neo-classic/_css/_common.css
を見てみると、

css

1div.mxNeoClassicGlobalBoxDiv div.mxGobanDiv canvas 2{ 3 background-image:url(../../../_img/bk/beech.jpg);background-size:cover; 4}

という一節が出てきます。「そうか」と、要はlaravelは相対親ディレクトリ../が苦手なのかと思い、ってことは、
http://maxigos.dev/_maxigos/_sample/neo-classic/_css/../../../_img/bk/beech.jpg
をみようとしてもダメなのねと思いながら見てみたら、なんと木目の画像が表示されました。
ちゃんと
http://maxigos.dev/_maxigos/_img/bk/beech.jpg
にリダイレクト(?)されていました。
とても意外でした。

Q2) laravelでは相対親ディレクトリ指定が難しいという解釈は間違ってるのでしょうか?
Q3) 順番に見ていったら画像が表示されたのに、何故http://maxigos.dev/_maxigos/では碁盤の背景に木目画像が表示されないのでしょうか?

話は前後しますが、インクルードされる path.php というファイルについて

http://maxigos.dev/_maxigos/_mgos/sgfplayer.php
を見ると、

Whoops, looks like something went wrong. (1/1) ErrorException include(_sample/neo-classic/_cfg/basic.cfg): failed to open stream: No such file or directory in gosLib.php (line 60)

となるのは、gosLib.phpが最初にinclude_onceしてるpath.phpというファイルの終わりで

php

1// 1) relative path (in theory, used in .php files) 2 3if (!isset($gosRootRelativePath)) $gosRootRelativePath=gosGetRootRelativePath(); 4 5// 2) absolute path (in theory, used in .js files) 6 7if (!isset($gosRootAbsolutePath)) $gosRootAbsolutePath=gosGetRootAbsolutePath();

とているのですが、それに続いて

php

1dd($gosRootRelativePath);

とすると、
"../../Users/taro/development/laravel/maxiGos/public/_maxiGos/"

php

1dd($gosRootAbsolutePath);

とすると、
"http://maxigos.dev/Users/taro/development/laravel/maxiGos/public/_maxiGos/"
と、明らかに意図しない値が帰って来てます。
(見易さのため、一旦sgfplayer.phpheader()関数はコメントアウトしてあります)

Q4) MAMPでは上手く動いてるようにみえるこのファイルがlaravelでは意図せぬ動きに見えるのはなぜでしょう?

一応path.phpの全文を載せておきます。

php

1<?php 2// maxiGos v6.57 > path.php 3// must be in the same folder as aloneLib.php and gosLib.php 4 5// $gosRootRelativePath is a relative path from php script that includes this script 6// to "_maxigos" folder (must end by "_maxigos/" or be "/") 7// $gosRootRelativePath can also be set in the calling php script of the web page that uses maxiGos 8// better to use a relative path (to the calling php scripts) to avoid access file problem 9// sometimes, it may be necessary to set it by hand in the php calling scripts 10// when gosGetRootPath() doesn't work (for instance when $_SERVER['DOCUMENT_ROOT'] is unkown) 11 12// $gosRootAbsolutePath is an absolute web path to "_maxigos" folder (ends by "_maxigos/") 13// it is used in maxiGos ".js" code to retrieve external resources such as css files, images, ... 14// warning: some servers seem to add "/" to the end of $_SERVER['DOCUMENT_ROOT'], some others don't 15 16function gosGetRootRelativePath() 17{ 18 $a=$_SERVER['PHP_SELF']; 19 $thisDir=substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT'])); 20 $len=strlen($thisDir); 21 $gosDir=substr($thisDir,0,$len-5); // -5 to remove "/_php" 22 $b=$gosDir."/"; 23 $k=0; 24 $c=""; 25 $km=substr_count($a,"/")-1; 26 while($k<$km) 27 { 28 $c=$c."../"; 29 $k++; 30 } 31 return $c.preg_replace("#^[/]+?#","",$b); 32} 33 34function gosGetRootAbsolutePath() 35{ 36 $thisDir=substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT'])); 37 $len=strlen($thisDir); 38 $gosDir=substr($thisDir,0,$len-5); // -5 to remove "/_php" 39 $gosDir="/".preg_replace("#^[/]+?#","",$gosDir); 40 $gosDir=preg_replace("#[/]+?$#","",$gosDir)."/"; 41 if (isset($_SERVER['HTTP_HOST'])) 42 { 43 // add protocol and host name 44 // useful when maxiGos is on a server different from the calling page one 45 $protocol=stripos($_SERVER['SERVER_PROTOCOL'],'https')===true ?'https://':'http://'; 46 $gosDir=$protocol.$_SERVER['HTTP_HOST'].$gosDir; 47 } 48 return $gosDir; 49} 50 51// 1) relative path (in theory, used in .php files) 52 53if (!isset($gosRootRelativePath)) $gosRootRelativePath=gosGetRootRelativePath(); 54 55// 2) absolute path (in theory, used in .js files) 56 57if (!isset($gosRootAbsolutePath)) $gosRootAbsolutePath=gosGetRootAbsolutePath();

以上、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Laravelは非常によく考えられたフレームワークですが、問題を無かった事にできるわけではないので、maxiGosがLaravelとして組み込みやすい形をしていない以上、今後も連係上の問題が出ることが想定されることから、素のPHPで碁のライブラリを取り扱う習熟度を上げてから、Q&Aサイトとしてフレームワークを活用するか判断するほうが仕事が早いと思います。
公式サイトにWordpress用のプラグインがあるようなので、Q&Aサイトの性質から言ってもプログラムを勉強しながらであればWordpressが適切かと思います。
MaxiGos

この方のサイトに導入方法などの解説があるようです
MAXIGOS Ino Diary

このサイトの方がMaxiGosをサイトに実際に導入しているみたいです
碁友会 問題集
maxiGosについて

投稿2017/07/15 21:44

aro10

総合スコア4106

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

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

taro_nii_chan

2017/07/16 08:54

質問に追記でその後の状況をお伝えしますが、取り敢えず http://maxigos.dev/maxiGos に碁盤を表示させることは出来ました。 スマートではありませんが。 今は laravel を使えるように勉強したい気持ちが強いので、出来れば laravel での実装を目指したいのですが、どうしても laravel ではアドバイスのしようがないということでしたら wordpress も一から勉強しないといけないのかなと思っております。
aro10

2017/07/18 15:53

実開発にかける労力がライブラリ間のつなぎ合わせも開発作業に含まれる事になるので、Laravelとは少し外れるPHPのホームページ制作では普段使わないようなプログラムの技術が求められるため結構大変ですが挑戰するのが面白ければ良いかと思います。 Laravelにバッチ処理や他サービスとのデータ連係を視野に魅力を感じているのであれば、WordPressの裏方にLaravelの技術を利用するライブラリもあります。 [WordPress Corcel](https://laravel-news.com/wordpress-and-laravel)
taro_nii_chan

2017/07/18 22:57

お勧めは WordPress であること、よく分かりました。Q1〜Q4 に関してはいかがですか?
aro10

2017/07/19 06:59

この辺りに関しては、実際に開発に携わっていないので環境依存になるかとおもい、動くコードが無い事とMaxiGosは全く取り扱っていないので回答の範疇を超えてなんとも言えないですね
aro10

2017/07/19 07:08

Laraveで作る場合は、maxiGosは機能実装やデータ取得部分だけを参考にしてフロントエンドはJS用の碁盤作成ライブラリを何か利用しながら、それに当て込むデータを碁用のSGFかCSV等のデータフォーマットをDBに取り込むコマンドを作った上で、あとは普通のWebサービスとして作ったほうが気持ち良く作れるとおもいます。
taro_nii_chan

2017/07/19 09:59

コメントありがとうございます。 どこまでお答えを望んで良いのか分からないため、範疇を越えてしまっていたとしたら失礼しました。 2017/07/19 16:08 のコメントの方の意味が全く理解できないので、私のスキルでは解決できない質問だったのだと思います。Laravel は Laravel で、maxiGos は maxiGos で、もう少し基本的なことを学習した後で、どういった実装で当初の目的に近づけるか考えたいと思います。
aro10

2017/07/19 10:57

ひとまず、まずはWordpressからであれば技術的なつまりは少ないかと思い囲碁の良いQ&Aサイトが作成できるかと思うので諦めずに頑張ってみてください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問