2017-10-20 21 views
0

Je suis le problème le plus étrange jamais. J'ai eu le serveur Apache2 avec PHP5 pendant plus de 2 ans en cours d'exécution sur mon Raspberry Pi. Un code simple en php pour se connecter à mySQL et récupérer/afficher certaines données. Dernièrement, ma carte SDHC est morte avec l'OS Raspbian, donc j'ai dû tout re-configurer. Mon code était sur github alors heureusement je viens de télécharger tout à partir de là.Erreur de connexion entre PHP5 et MySQL sur RasPi

Pour une raison quelconque, mon php ne se connecte pas et ne montre rien, en gros la page ne peut pas être affichée. J'ai vérifié les autres codes php et ils fonctionnent. Qu'est-ce que je ne comprends pas est depuis que je configure la base de données SQL avec exactement les mêmes paramètres pourquoi le php ne fonctionne pas?

Pour vérifier, j'ai couru mon code python local qui est chargé de se connecter à la même base de données mysql et le remplir, et l'ancien code a très bien fonctionné. Je ne sais vraiment pas quel est le problème avec php ne montrant aucun message et ne fonctionne pas. Suis-je sur quelque chose? Ou simplement manquer quelque chose que j'ai dû configurer?

Le code php pour le serveur, enregistré sous mysql.php:

<?php 
    //Step 1 
    $conn = mysqli_connect('localhost', 'zikmir', 'gforce', 'temp_database') or die('Error connecting to MySQL server.'); 
    $dbhost = "localhost"; 
    $dbuser = "zikmir"; 
    $dbpass = "gforce"; 
    $dbname = "temp_database"; 

    $page = $_SERVER['PHP_SELF']; 
    $sec = "5"; 
    header("Refresh: $sec; url=$page"); 
?> 

<html> 
    <head> 
    </head> 
    <body> 
     <h1> 
      PHP connect to MySQL 
     </h1> 
     <?php 
      //Step 2 
      $sql = "SELECT Id, time, temp FROM time_temp ORDER BY Id DESC LIMIT 0,1"; 
      $result = $conn->query($sql) or die('Error querying database.'); 

      while ($row = $result->fetch_assoc()){ 
      echo "ID " . $row["Id"]. " Time:" . $row["time"]. " Temp: " . $row["temp"]. "<br>"; 
      $conn->close();      } 
     ?> 
    </body> 
</html> 

Ma nouvelle base de données est réglée de façon identique à ce que j'avais avant, au moins je pense. Les informations de base de données est la suivante:

database name: temp_database 
user: zikmir 
pass: gforce 
table name: time_temp 
column: Id, time, temp 


SELECT *FROM time_temp; 
+----+-----------------------------+------------+ 
| Id | time      | temp  | 
+----+-----------------------------+------------+ 
| 1 | 0000-00-00 00:00:00   |   25 | 
| 2 | 0000-00-00 00:00:00   |   26 | 
| 3 | 2017-10-20 04:03:42   |  22.687 | 
| 4 | 2017-10-20 04:04:14   |  22.75 | 
| 5 | 2017-10-20 04:04:47   |  22.687 | 
| 6 | 2017-10-20 04:05:28   |  22.687 | 
| 7 | 2017-10-20 04:09:40   |   26 | 
| 8 | 2017-10-20 04:11:26   |   26 | 
+----+-----------------------------+------------+ 

Ces valeurs où peuplaient manuellement, bien les quelques premiers et de repos par un programme Python qui fonctionne toujours parfaitement. C'était le même programme utilisé avant l'accident. Donc, aucun code n'est changé, fonctionne comme avant et remplit la base de données. Le code python est:

# External module imports 
import time 
import os 
import datetime 
import MySQLdb 

os.system('sudo modprobe w1-gpio') 
os.system('sudo modprobe w1-therm') 

# Connect to mysql 
db=MySQLdb.connect("localhost","zikmir","gforce","temp_database") 
cursor=db.cursor() 

while True: 
    # Initialization 
    sensor= "/sys/bus/w1/devices/28-011620ee98ee/w1_slave" 
    # Open the file for sensor 
    file = open(sensor) 
    # Read all of the text in the file. 
    text = file.read() 
    # Close the file now that the text has been read. 
    file.close() 
    # Split the text with new lines (\n) and select the second line. 
    second_line = text.split("\n")[1] 
    # Split the line into words, referring to the spaces, and select the 10th word (counting from 0). 
    temp_data = second_line.split(" ")[9] 
    # The first two characters are "t=", so get rid of those and convert the temperature from a string to a number. 
    temp = float(temp_data[2:]) 
    # Put the decimal point in the right place and display it. 
    temp = temp/1000 
    # Display time 
    t= datetime.datetime.now() 
    print t ,temp 

    # Push data into mySQL 
    sql = "INSERT INTO time_temp VALUES('0',now(),%s)" 
    cursor.execute (sql,(temp,)) 
    db.commit() 

    # Wait 5 seconds 
    time.sleep(30) 

Comme mentionné, aucun code n'a été modifié, il vient d'être téléchargé depuis github. Seule la base de données a été recréée avec les mêmes noms de table, e.t.c. Toute aide sera la bienvenue!

+1

Avez-vous vérifié votre journal des erreurs? Une bonne idée est également d'activer 'display_errors' dans votre environnement PHP local. Lire la suite ici: [Comment puis-je obtenir des erreurs PHP à afficher?] (Http://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display) –

+0

Ou avez-vous tourné php rapport d'erreur sur pour obtenir un message d'erreur significatif? – Shadow

+0

Vous êtes tous les deux des génies! @MagnusEriksson l'erreur que je vois est la suivante: Erreur fatale: Appel à la fonction non définie mysqli_connect() dans /var/www/html/mysql.php à la ligne 6. Ma question suivante serait pourquoi mysqli_connect() n'est pas travail? est-ce dû à une bibliothèque manquante d'instillation php? –

Répondre

0

Et cela a fonctionné, merci spécial à Magnus, j'ai pu constater que la bibliothèque mysqli manquait. Installation simple par cette commande:

sudo apt-get install php5-mysqlnd 

et ajouter ces fichiers s'ils existent pas dans le fichier php.ini:

extension=msqli.so 
extension=msql.so 

Après cela, il a travaillé comme un charme!