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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PHP

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

Q&A

解決済

2回答

3039閲覧

さくらサーバーにFTPで配置したphpファイルにWebGLで作成したUnityアプリからアクセスしたい

zenobread

総合スコア44

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PHP

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

0グッド

0クリップ

投稿2019/01/10 17:53

編集2019/01/11 05:55

さくらサーバーにてファイル同士が参照できない

ProjectSettingsでWebアプリに変換したUnityよりアクセスしたいのですがエラーが出ており出来ないです。

具体的には
1、Unityアプリ側からPHPファイルにある値をPostする

2、受け取ったPHPファイルから更に別のPHPファイルに計算のためデータを送る

3、計算を終えたPHPファイルからUnityによりPostされたPHPファイルに送り返す

4、計算結果を受け取ったPHPファイルからUnityにデータを送る

なのですが1の段階でエラーメッセージとして
HTTP/1.1 500 Internal Server Error
が表示されています。

Unityやphp側に問題があるのかと思いxamppでサーバーを立てて行ってみましたが、特にエラーは起こらず
上記の1~4まで行うことが出来たので、さくらサーバーに問題があるのだと思いました。

FTPはWinSCPでさくらサーバーはスタンダードプランです。

前回の質問の際は奇術ミスという初歩的なミスを行っていたため今回も同じことがないよう確かめてみましたが
どうやらそういうこともないようです。またスタンダードプランだからできないのでは、ということも友人に確認したところそんなことはないはず、とだったので恐らく違うと考えました。

全く間違いと思われる部分に心当たりがないため開示すべき情報についてもどうかご教授お願いします。

追記1
以下に該当の見ていただきたいコードを載せます。
ただパスワードなどは*で隠しております。ご了承ください。

送受信する側のUNITYC#ファイル
localhostは実機では正しいアドレスを記入しています

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.Networking; 6public class PHPTEST : MonoBehaviour 7{ 8 public Text ResultText_; 9 public GameObject Drop_1; 10 public GameObject Drop_2; 11 Dropdown_1 drop; 12 Dropdown_2 drop2; 13 private string time; 14 public int callory_time; 15 private string ServerAddress = "http://localhost/php/API_req.php"; 16 // Use this for initialization 17 void Start() 18 { 19 drop = Drop_1.GetComponent<Dropdown_1>(); 20 drop2 = Drop_2.GetComponent<Dropdown_2>(); 21 } 22 public void SendSignal_Button_Push() 23 { 24 if(drop.rel==null||drop2.rel2==null){ 25 Debug.Log("値が入力されていません"); 26 ResultText_.GetComponent<Text>().text = "値が入力されていません"; 27 return; 28 } 29 StartCoroutine("Access"); 30 Debug.Log(drop.rel); 31 Debug.Log(drop2.rel2); 32 } 33 34 private IEnumerator Access() 35 { 36 37 Dictionary<string, string> dic = new Dictionary<string, string> 38 { 39 { "id_1", drop.rel}, 40 { "id_2", drop2.rel2 } 41 }; 42 Debug.Log(dic["id_1"]); 43 Debug.Log(dic["id_2"]); 44 StartCoroutine(Post(ServerAddress, dic)); 45 yield return 0; 46 } 47 48 private IEnumerator Post(string url, Dictionary<string, string> post) 49 { 50 WWWForm form = new WWWForm(); 51 foreach (KeyValuePair<string, string> post_arg in post) 52 { 53 form.AddField(post_arg.Key, post_arg.Value); 54 } 55 56 UnityWebRequest www = UnityWebRequest.Post(ServerAddress,form); 57 58 www.timeout = 30; 59 yield return www.SendWebRequest(); 60 61 if (www.error != null) 62 { 63 ResultText_.GetComponent<Text>().text = www.error; 64 Debug.Log("HttpPost NG:" + www.error); 65 } 66 else if (www.isDone) 67 { 68 Debug.Log(www.downloadHandler.text); 69 time = www.downloadHandler.text; 70 ResultText_.GetComponent<Text>().text =time; 71 callory_time = int.Parse(time); 72 73 www=null; 74 75 } 76 } 77 78 79 // Update is called once per frame 80 void Update() 81 { 82 83 } 84} 85

Unityからデータを受け取るphp

php

1<?php 2 require "API_prd_cp.php"; 3$url="http://s-proj.com/utils/checkHoliday.php?kind=h"; 4$holiday_check=file_get_contents($url); 5$id_1=$_POST["id_1"]; 6$id_2=$_POST["id_2"]; 7$res=$id_1.$id_2; 8 if($holiday_check=="holiday"){ 9 $holiday=1; 10 $res=main($id_1,$id_2,$holiday); 11 }else if($holiday_check=="else"){ 12 $holiday=0; 13 $res=main($id_1,$id_2,$holiday); 14 } 15 16echo $res; 17 18 ?>

phpからphpにデータを受け取りデータを返すphp
hostやパスにはphpmyadminにログインした時のものを使っております

php

1function main($name,$name2,$hol){ 2 try{ 3 $db=new PDO('mysql:dbname=*;host=*;charset=utf8','*','*'); 4 if($hol==1){ 5 $result_from=$db->prepare("SELECT * FROM API_about WHERE TIME(station_time)>=NOW() AND station_name LIKE '%$name%' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Inner%' ORDER BY TIME(station_time) LIMIT 1"); 6 $result_from2=$db->prepare("SELECT * FROM API_about WHERE TIME(station_time)>=NOW() AND station_name LIKE'%$name%' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Inner%' ORDER BY TIME(station_time) LIMIT 1"); 7 $result_from->execute(); 8 $result_from2->execute(); 9 $result_from->setFetchMode(PDO::FETCH_ASSOC); 10 $result_from2->setFetchMode(PDO::FETCH_ASSOC); 11 $row_from=$result_from->fetch(); 12 $row_from2=$result_from2->fetch(); 13 $num=(string)$row_from['station_number']; 14 $num2=(string)$row_from2['station_number']; 15 $day=$row_from['day_sp']; 16 $day2=$row_from2['day_sp']; 17 18 $result_to=$db->prepare("SELECT*FROM API_about WHERE station_name LIKE '%$name2%' AND station_number='$num' LIMIT 1 "); 19 $result_to2=$db->prepare("SELECT*FROM API_about WHERE station_name LIKE '%$name2%' AND station_number='$num2' LIMIT 1 "); 20 $result_to->execute(); 21 $result_to2->execute(); 22 $result_to->setFetchMode(PDO::FETCH_ASSOC); 23 $result_to2->setFetchMode(PDO::FETCH_ASSOC); 24 $row_to=$result_to->fetch(); 25 $row_to2=$result_to2->fetch(); 26 27 $time_from=strtotime($row_from['station_time']); 28 $time_from2=strtotime($row_from2['station_time']); 29 $time_to=strtotime($row_to['station_time']); 30 $time_to2=strtotime($row_to2['station_time']); 31 32 if($time_from>$time_to){ 33 $time_cal_result=$time_from-$time_to; 34 }else{ 35 $time_cal_result=$time_to-$time_from; 36 } 37 if($time_from2>$time_to2){ 38 $time_cal_result2=$time_from2-$time_to2; 39 }else{ 40 $time_cal_result2=$time_to2-$time_from2; 41 } 42 43 44 if($time_cal_result==null||$time_cal_result2==null)echo "MISS4"; 45 46 if($time_cal_result>$time_cal_result2) 47 { 48 echo date("i",$time_cal_result2); 49 }else{ 50 echo date("i",$time_cal_result); 51 } 52 //echo date("i",$time_cal_result)."Inner"; 53 //echo date("i",$time_cal_result2)."Outer"; 54 }else if($hol==0){ 55 $result_from=$db->prepare("SELECT * FROM API_about WHERE TIME(station_time)>=NOW() AND station_name LIKE '%$name%' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Inner%' ORDER BY TIME(station_time) LIMIT 1"); 56 $result_from2=$db->prepare("SELECT * FROM API_about WHERE TIME(station_time)>=NOW() AND station_name LIKE'%$name%' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Outer%' ORDER BY TIME(station_time) LIMIT 1"); 57 $result_from->execute(); 58 $result_from2->execute(); 59 $result_from->setFetchMode(PDO::FETCH_ASSOC); 60 $result_from2->setFetchMode(PDO::FETCH_ASSOC); 61 $row_from=$result_from->fetch(); 62 $row_from2=$result_from2->fetch(); 63 $num=(string)$row_from['station_number']; 64 $num2=(string)$row_from2['station_number']; 65 $day=$row_from['day_sp']; 66 $day2=$row_from2['day_sp']; 67 68 $result_to=$db->prepare("SELECT*FROM API_about WHERE station_name LIKE '%$name2%' AND station_number='$num' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Inner%' LIMIT 1 "); 69 $result_to2=$db->prepare("SELECT*FROM API_about WHERE station_name LIKE '%$name2%' AND station_number='$num2' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Outer%' LIMIT 1 "); 70 $result_to->execute(); 71 $result_to2->execute(); 72 $result_to->setFetchMode(PDO::FETCH_ASSOC); 73 $result_to2->setFetchMode(PDO::FETCH_ASSOC); 74 $row_to=$result_to->fetch(); 75 $row_to2=$result_to2->fetch(); 76 77 /*echo $row_from['station_time']; 78 echo "<br/>"; 79 echo $row_from2['station_time']; 80 echo "<br/>"; 81 echo $row_to['station_time']; 82 echo "<br/>"; 83 echo $row_to2['station_time']; 84 echo "<br/>";*/ 85 86 $time_from=strtotime($row_from['station_time']); 87 $time_from2=strtotime($row_from2['station_time']); 88 $time_to=strtotime($row_to['station_time']); 89 $time_to2=strtotime($row_to2['station_time']); 90 91 /*echo $time_from; 92 echo "<br/>"; 93 echo $time_from; 94 echo "<br/>"; 95 echo $time_to; 96 echo "<br/>"; 97 echo $time_to2; 98 echo "<br/>";*/ 99 100 if($time_from>$time_to){ 101 $time_cal_result=$time_from-$time_to; 102 }else{ 103 $time_cal_result=$time_to-$time_from; 104 } 105 if($time_from2>$time_to2){ 106 $time_cal_result2=$time_from2-$time_to2; 107 }else{ 108 $time_cal_result2=$time_to2-$time_from2; 109 } 110 111 112 if($time_cal_result==null||$time_cal_result2==null)echo "MISS4"; 113 114 if($time_cal_result>$time_cal_result2) 115 { 116 echo date("i",$time_cal_result2); 117 }else{ 118 echo date("i",$time_cal_result); 119 } 120 /*echo date("i",$time_cal_result)."Inner"; 121 echo date("i",$time_cal_result2)."Outer";*/ 122 } 123 /*if($time_cal_result>$time_cal_result2){ 124 echo date("H:i",$time_cal_result2)."Inner".$row_to2['station_number']; 125 }else{ 126 echo date("H:i",$time_cal_result)."Outer"; 127 }*/ 128 $db=null; 129 }catch(PDOException $e){ 130 echo 'DB接続エラー:'.$e->getMessage(); 131 } 132 }

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

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

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

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

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

m.ts10806

2019/01/10 22:58

だいぶ細かいですが 奇術→記述 かと。 php自体が実行されていないか、コードのどこかでエラーが起きているかは確認してください。
退会済みユーザー

退会済みユーザー

2019/01/10 23:12

ある意味奇術でも間違いでは(笑) 十中八九、何らかのphp拡張がひとつ以上不足している。 必要な拡張があるか確認してください
退会済みユーザー

退会済みユーザー

2019/01/11 01:28

拡張が足りない、phpの文法エラー、DBアクセスのクエリー文法エラー、さぁどれだ。
退会済みユーザー

退会済みユーザー

2019/01/11 08:30

SQL-INJECT w
退会済みユーザー

退会済みユーザー

2019/01/11 08:31

あっw LIKE'
zenobread

2019/01/11 08:56

どういうことでしょうか?詳しくお願いします。
退会済みユーザー

退会済みユーザー

2019/01/11 09:36

SQL文の中で変数を直に展開することを、SQLインジェクションといい、細工した文字列データを挿入する子でデータベースを破壊したりできるので、やってはならないことです。 例えば「LIKE '%$name%'」とか。 prepare()まで使っていて、bindParam()しないの、すっごく残念。
guest

回答2

0

ベストアンサー

さっぱり要領得ないけど、明らかにヤバそうな箇所のみ指摘。

$result_from=$db->prepare("SELECT * FROM API_about WHERE TIME(station_time)>=NOW() AND station_name LIKE '%$name%' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Inner%' ORDER BY TIME(station_time) LIMIT 1"); $result_from2=$db->prepare("SELECT * FROM API_about WHERE TIME(station_time)>=NOW() AND station_name LIKE'%$name%' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Outer%' ORDER BY TIME(station_time) LIMIT 1");

SQLインジェクションやめれ。

$result_to=$db->prepare("SELECT*FROM API_about WHERE station_name LIKE '%$name2%' AND station_number='$num' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Inner%' LIMIT 1 "); $result_to2=$db->prepare("SELECT*FROM API_about WHERE station_name LIKE '%$name2%' AND station_number='$num2' AND day_sp LIKE '%SaturdayHoliday%' AND looping LIKE '%Outer%' LIMIT 1 ");

ここもSQLインジェクションやめれ。
そして、上は$name2下も$name2でいいのかい?
そのくせ$num$num2ってなってるけど。

LIKE句の書き換え方については
PDO::prepareで部分一致(like %...%)させる時にエラーになる - Qiita
参照。

投稿2019/01/11 09:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

zenobread

2019/01/13 12:11

ありがとうございます。 結果から言うとまた別なところが問題でしたが、参考になりました。
退会済みユーザー

退会済みユーザー

2019/01/13 12:24

別なところが問題だったならそこがどこだったかを自己解決としてベストアンサーにしましょう
guest

0

レンタルサーバーでも管理画面からログが見えたかと思いますが、確認しましたか?

投稿2019/01/10 22:46

scsi

総合スコア2840

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

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

zenobread

2019/01/11 08:55

遅れました。 ログには特に何も表示がなく、エラーログもありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問