2017-10-15 87 views
1

請參見下面的解決方案在後上傳PHP纖薄使用FTP


我的PHP苗條網址正常工作在我的地方。 但如果我上傳到使用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苗條文件。 我在本地使用作曲家。

在我的本地

我重定向我的IP,以localdev域

更新

我的PHP代碼都在我的在線服務器上的這個路徑:

域/的public_html /測試/ PHP

這是php文件夾的文件夾結構:

image

的.htaccess代碼:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^index.php [QSA,L] 

Soltion

我得到了什麼問題:

我必須尋找到這個文件夾:域/的public_html /測試/ php/public 而不是:domain/public_html

所以

的API必須的環節是:http://www.domain.nl/beta/php/public/myapilink 而不是:http://www.domain.nl/myapilink

+1

請顯示您的代碼。 –

+0

嗨,本,我添加了一些代碼 – Momen

+0

聽起來像是你錯過了'.htaccess'文件或類似的東西。您的在線服務器是否使用Apache? – Phil

回答

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(); 

這一過程被稱爲 「使用預處理語句」。它會爲你節省很多心痛!

+0

鑑於OP的代碼有'PDO :: FETCH_OBJ',我會說他們正在使用PDO,而不是MySQLi – Phil

+0

@Phil手掌進入額頭...糾正。 –

+0

'bindParam',而不是'bind_param' – Phil