2017-10-15 8 views
1

Voir la solution ci-dessous dans le posteTélécharger PHP mince via FTP


Mon php urls mince fonctionne très bien sur mon local. Mais si je télécharge à l'aide de FTP à mon serveur en ligne, je reçois erreur 404, des idées pourquoi?

ceci est mon code de la route:

<?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().'}}'); 
    } 
}); 

J'ai téléchargé mes fichiers php mince en utilisant Filezilla. J'utilise le compositeur sur mon local.

sur mon locale rediriger mon ip au domaine localdev

mise à jour

mon code php sont dans ce chemin sur mon serveur en ligne:

domaine/public_html/beta/php

et ceci est la structure de dossiers du dossier php:

image

code .htaccess est:

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

Soltion

Je suis arrivé ce qui est de la question:

Je dois regarder dans ce dossier: domaine/public_html/beta/php/public Et non: domain/public_html

si

Le lien du api doit être est: http://www.domain.nl/beta/php/public/myapilink Et non: http://www.domain.nl/myapilink

+1

Veuillez montrer votre code. –

+0

Salut Ben, j'ai ajouté du code – Momen

+0

On dirait que vous avez manqué un fichier '.htaccess' ou similaire. Votre serveur en ligne utilise-t-il Apache? – Phil

Répondre

0

404 est une erreur de serveur, de sorte que le problème est que le fichier n'est pas disponible, rien avec votre code. Vérifiez qu'une fois le fichier téléchargé, il est défini pour être publiquement lisible. Même si le fichier est marqué comme tel, vous devrez peut-être vérifier que le dossier qui le contient sur le serveur est également défini pour être publiquement lisible.

En regardant votre code, deux problèmes ressortent. La première est que $db = $db->connect(); a besoin de certains paramètres spécifiant la base de données, le nom d'utilisateur et le mot de passe (ou d'autres paramètres de connexion en fonction de la configuration de votre base de données). Je ne sais pas comment votre moteur PHP et base de données sont configurés, mais en regardant votre code, il va probablement impliquer le remplacement:

$db = new db(); 

avec quelque chose comme:

$db = new PDO("mysql:host=$servername;dbname=$dbName", $username, $password); 

La deuxième question est que votre code est très vulnérable à SQL injection.Pour résoudre ce problème, remplacer:

$sql = "SELECT * FROM test where id = $id"; 

avec

$sql = "SELECT * FROM test where id = :id"; 

et:

$stmt = $db->query($sql); 

avec:

$stmt = $db->prepare($sql); 
$stmt->bindValue(':id', $id, PDO::PARAM_STR); 
$stmt->execute(); 

Ce processus est appelé "à l'aide des instructions préparées". Cela vous épargnera beaucoup de chagrin!

+0

Étant donné le code de OP a 'PDO :: FETCH_OBJ', je dirais qu'ils utilisent PDO, pas MySQLi – Phil

+0

@Phil Slamming paume dans le front ... corrigé. –

+0

'bindParam', pas' bind_param' – Phil