2009-03-14 6 views
0

Quelqu'un peut-il me dire ce que je fais mal vraiment? Je vais les noix, le code suivant fonctionne parfaitement sur localhost/WIN et quand je l'essayer sur le webhost/linux il fournit des avertissements:Besoin d'un diagnostic de script PHP pour un petit extrait de code

$lines = file('english.php'); 
foreach($lines as $line) { 
    $matches=array(); 
    if (preg_match('/DEFINE\(\'(.*?)\',\s*\'(.*)\'\);/i', $line, $matches)) { 
     $keys[] = $matches[1]; 
     $values[] = $matches[2]; 
    } 
} 
$lang = array_combine($keys, $values); 

Quand je test sur webhost:

Warning: array_combine() expects parameter 1 to be array, null given in /home/xx/public_html/xx on line 616 

Mais serveur local (windows xp) cela fonctionne parfaitement. Je ne sais pas ce que je fais mal, s'il vous plaît me aider à résoudre ce cauchemar :(

Merci.

Répondre

2

Je ne vois rien de mal avec évidemment votre code, mais je suis curieux de savoir pourquoi vous construisez des réseaux séparés puis les combiner plutôt que la construction d'un tableau combiné:

// Make sure this file is local to the system the script is running on. 
// If it's a "url://" path, you can run into url_fopen problems. 
$lines = file('english.php'); 

// No need to reinitialize each time. 
$matches = array(); 

$lang = array(); 
foreach($lines as $line) { 
    if (preg_match('/DEFINE\(\'([^\']*)\',\s*\'([^\\\\\']*(?:\\.[^\\\\\']*)*)\'\);/i', $line, $matches)) { 
     $lang[$matches[1]] = $matches[2]; 
    } 
} 

(. J'ai aussi changé votre regex pour gérer des guillemets simples)

+0

Vous êtes le patron! Le problème était avec le fichier lui-même .. et j'ai corrigé mon code selon vos instructions aussi –

0

sont les versions de php même?

Et êtes-vous sûr que vous avez transféré tous vos fichiers le webhost?

+0

array_combine() est uniquement disponible en PHP 5. Si le serveur avait PHP 4, une erreur "la fonction n'existe pas" serait montrée au lieu de "array_combin" e() attend que le paramètre 1 soit un tableau " – Seb

+0

Le code est une copie de clone. La version php est 5.2.8 sur les deux même .. –

0

il semble votre variable de touches $ est nulle, parce que vous n'êtes pas initialisant partout.

Ma meilleure estimation est que le fichier english.php sur votre serveur est vide (ou n'existe pas) , donc quand vous essayez de le lire rien g est enregistré dans la variable $ keys;

Essayez d'ajouter une valeur initiale de cette variable avant l'instruction foreach:

$lines = file('english.php'); 
$keys = array(); 
foreach($lines as $line) { 
$matches=array(); 
    if (preg_match('/DEFINE\(\'(.*?)\',\s*\'(.*)\'\);/i', $line, $matches)) { 
     $keys[] = $matches[1]; 
     $values[] = $matches[2]; 
    } 
} 
$lang = array_combine($keys, $values); 

De cette façon, même si le fichier n'existe pas ou est vide, vous êtes couvrant tous les chemins possibles.

Vous devriez toujours le code comme si tout pouvait aller mal, et non l'inverse :)

+0

Merci. Le fichier existe et contient 89 lignes de données, aussi quand je teste sur localhost les résultats sont imprimés dans le navigateur .. c'est pourquoi je suis confus. parce que cela fonctionne sans problème sur localhost, mais pas sur le webhost .. :) –

+0

Mise à jour: j'ai ajouté $ keys = array(); et $ values ​​= array(); ci-dessous $ lines et il fonctionne encore sur localhost parfaitement (il imprime les résultats) mais sur l'hébergeur il a changé l'erreur: Attention: array_combine() [function.array-combine]: Les deux paramètres doivent avoir au moins 1 élément dans/home/... –

+0

Il dit qu'ils sont des tableaux vides, mais ce n'est pas vrai, le fichier contient 89 lignes et localhost peut les lire tous .. confus :) –

Questions connexes