请参阅下面的解决方案
我的php slim网址在我的本地工作正常。 但如果我上传到使用FTP到我的在线服务器, 我收到404错误, 任何想法为什么?
这是我的路线代码:
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
$app = new \Slim\App;
$fb = new \Facebook\Facebook([
'app_id' => '',
'app_secret' => '',
'default_graph_version' => 'v2.9',
]);
$app->options('/{routes:.+}', function ($request, $response, $args) {
return $response;
});
$app->add(function ($req, $res, $next) {
$response = $next($req, $res);
return $response
->withHeader('Access-Control-Allow-Origin', '')
->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
->withHeader('Access-Control-Allow-Methods', 'GET, POST');
});
//get all
$app->post('/api/mykenteken', function (Request $request, Response $response) use ($fb){
$token = $request->getParam('token');
try {
$fb_response = $fb->get('/me', $token);
} catch(\Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo '{"error": {"text": "'.$e->getMessage().'"} }';
exit;
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo '{"error": {"text": "'.$e->getMessage().'"} }';
exit;
}
$id = $request->getParam('id');
$sql = "SELECT * FROM test where id = $id";
try{
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->query($sql);
$users = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($users);
} catch(PDOException $e){
return $response->withStatus(400)->write('{"error": {"text": '.$e->getMessage().'}}');
}
});
我使用fileZilla上传了我的php slim文件。 我在当地使用作曲家。
在我的本地我将我的IP重定向到localdev域
更新
我的php代码在我的在线服务器上的这条路径中:
域/的public_html /β/ PHP的
这是php文件夹的文件夹结构:
.htaccess代码是:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
Soltion
我遇到了什么问题:
我必须查看这个文件夹:domain / public_html / beta / php / public 而不是:domain / public_html
所以
api的链接必须是:http://www.domain.nl/beta/php/public/myapilink 而不是:http://www.domain.nl/myapilink
答案 0 :(得分:0)
404是服务器错误,因此问题是该文件不可用,而不是您的代码。检查文件上传后,将其设置为公开可读。即使文件被标记为这样,您也可能需要检查服务器上包含它的文件夹是否也设置为公开可读。
查看您的代码,两个问题突出。第一个是$db = $db->connect();
需要一些参数来指定数据库,用户名和密码(或其他连接设置,具体取决于数据库的设置方式)。我不确定你的PHP引擎和数据库是如何设置的,但是看看你的代码,它可能会涉及更换:
$db = new db();
有类似的东西:
$db = new PDO( "mysql:host=$servername;dbname=$dbName", $username, $password );
第二个问题是您的代码极易受SQL injection攻击。要解决此问题,请替换:
$sql = "SELECT * FROM test where id = $id";
与
$sql = "SELECT * FROM test where id = :id";
和
$stmt = $db->query($sql);
使用:
$stmt = $db->prepare( $sql );
$stmt->bindValue( ':id', $id, PDO::PARAM_STR );
$stmt->execute();
此过程称为“使用预准备语句”。它会为你节省很多心痛!