2009-03-12 11 views
0

J'ai besoin d'un nouveau regard sur ce sujet. J'ai reçu ce code de quelqu'un qui a dit que ça fonctionnait.erreur d'analyse

Voici l'erreur:

PHP Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\Inetpub\wwwroot\2am\employment\send-email-form.php on line 19 

ligne 19 est la première ligne de GetUploadedFileInfo(). J'ai l'erreur pour les lignes 20 et 21 aussi. C'est évidemment avec le tableau $file_info mais quoi de mal ici?

Merci d'avance.

<?php 
$max_allowed_file_size = "100"; // this is size in KB 
list($name_of_uploaded_file, $type_of_uploaded_file, $size_of_uploaded_file) = GetUploadedFileInfo(); 
if(!Validate($name_of_uploaded_file, $type_of_uploaded_file, $size_of_uploaded_file, $max_allowed_file_size)) { 
    exit(); 
} 
LoadUploadedFile($name_of_uploaded_file); 
$path_of_uploaded_file = "uploads/" . $name_of_uploaded_file; 

    include_once('Mail.php'); 
    include_once('mime.php'); 

ComposeMail($path_of_uploaded_file); 


//////////////////// Functions //////////////////////// 

function GetUploadedFileInfo() { 
    $file_info[] = basename($_FILES['uploaded_file']['name']); 
    $file_info[] = substr($file_info[0], strrpos($file_info[0], '.') + 1); 
    $file_info[] = $_FILES["uploaded_file"]["size"]/1024; 
    return $file_info; 
} 


function Validate($name_of_uploaded_file, $type_of_uploaded_file, $size_of_uploaded_file, $max_allowed_file_size) { 
    if($size_of_uploaded_file>$max_allowed_file_size) { 
     echo "Size of file is greater than" . $max_allowed_file_size . " KB. <a href='attachment_email_form.html'>Click Here to upload a smaller sized file.</a>"; 
     return false; 
    } 
$allowed_extension = array("jpg", "jpeg", "gif", "bmp"); 
for($i=0; $i<sizeof($allowed_extension); $i++) { 
    $allowed_extension[$i] = strtoupper($allowed_extension[$i]); 
} 
$type_of_uploaded_file = strtoupper($type_of_uploaded_file); 
if(!(in_array(strtoupper($type_of_uploaded_file),$allowed_extension))) { 
    echo "You have uploaded a file with an extension of " . $type_of_uploaded_file . " . This type is not allowed. Please upload a file with allowed image extensions like jpg, jpeg, bmp, gif. <a href='attachment_email_form.html'>Click Here to upload a file with allowed extension.</a>"; 
    return false; 
} 
    return true; 
} 


function LoadUploadedFile($name_of_uploaded_file) { 
    move_uploaded_file($_FILES["uploaded_file"]["tmp_name"], "uploads/" . $name_of_uploaded_file); 
    return true; 
} 


function ComposeMail($name_of_uploaded_file) { 
    $name = $_POST['name']; 
    $user_message = $_POST['message']; 
    $to = "[email protected]"; 
    $subject="An email with attachement is sent"; 
    $from = "[email protected]"; 
    $text = "A user " . $name . "has sent you this message and an attachment: " . $user_message; 
    $message = new Mail_mime(); 
    $message->setTXTBody($text); 
    $message->addAttachment($name_of_uploaded_file); 
    $body = $message->get(); 
    $extraheaders = array("From"=>$from, "Subject"=>$subject); 
    $headers = $message->headers($extraheaders); 
    $mail = Mail::factory("mail"); 
    $mail->send($to, $headers, $body); 
    echo "Your Email with attachment was sent."; 
} 
?> 
+0

Quel est le problème avec les sauts de ligne?!? –

+0

Quelle est votre version de PHP? – altermativ

+0

J'utilise 5.2.8. Si nécessaire, je peux poster le code HTML pour cela. –

Répondre

4

Appelez-moi fou, mais j'essayé et n'a pas obtenu une erreur d'analyse - êtes-vous sûr que vous regardez le fichier à droite (ou la bonne version de celui-ci)? Edit: alors la seule chose à laquelle je peux penser est que les guillemets simples ferment une chaîne qui a été laissée ouverte ailleurs.

+0

Je l'ai aussi essayé, et je n'ai pas d'erreur d'analyse. –

+0

yup, je l'ai essayé une centaine de fois. toujours en vain. –

2

$ file_info n'est pas une fonction, c'est une variable (tableau).

Le code que vous contribuez n'a pas d'erreurs. Je copier/coller dans un fichier php et exécuter lint: php -l et il rapporte: Aucune erreur de syntaxe détectées dans test.php

+0

votre droite, a été pris dans quelque chose d'autre, def. ne travaille pas pour moi. Je pourrais vous donner la partie html, mais ça ne marchera pas du tout pour moi. –

0

Le message d'erreur ressemble il attend un index dans $file_info[]. Utilisez-vous une ancienne version de PHP qui ne reconnaît pas la syntaxe "[]" pour l'ajout à la fin d'un tableau?

+0

J'utilise la dernière version de PHP. –

+0

pourriez-vous commenter les lignes 19-21, et à leur place mettre le code suivant et voir si vous obtenez toujours une erreur de syntaxe? $ file_info [] = "bonjour"; $ file_info [] = "monde"; $ file_info [] = "!"; – Kip

+0

juste essayé et je reçois toujours la même erreur. –

0

L'erreur que vous recevez suggère une parenthèse ou des guillemets incompatibles, mais la syntaxe semble correcte. Je suis en mesure d'exécuter cette fonction sans erreur:


$ php -a 
Interactive shell 

php > function GetUploadedFileInfo() { 
php { $file_info[] = basename($_FILES['uploaded_file']['name']); 
php { $file_info[] = substr($file_info[0], strrpos($file_info[0], '.') + 1); 
php { $file_info[] = $_FILES["uploaded_file"]["size"]/1024; 
php { return $file_info; 
php { } 
php > print_r(GetUploadedFileInfo()); 
Array 
(
    [0] => 
    [1] => 
    [2] => 0 
) 

@PhiLho php ne vous permet de créer des variables de tableau dynamique. Cependant, comme il n'est pas correctement initialisé, vous pouvez obtenir un comportement inattendu dans les cas où la variable a été initialisée ailleurs. Mais puisque la variable est isolée à l'intérieur d'une fonction et n'est pas accessible globalement, c'est bien dans ce cas.


$ php -a 
Interactive shell 

php > $a = array(); 
php > $a[] = 'Hello, world!'; 
php > print_r($a); 
Array 
(
    [0] => Hello, world! 
) 
php > $b[] = 'Hello, SO!'; 
php > print_r($b); 
Array 
(
    [0] => Hello, SO! 
) 

En outre, quelle version de PHP exécutez-vous? Mes exemples utilisent PHP 5.2.8-pl2-gentoo.

+0

nouvelle version de php. Je l'ai installé il y a quelques semaines et jusqu'à présent, il a été parfait. est-ce que le chemin du dossier de téléchargement est peut-être erroné? cela aurait-il de l'importance si ce var n'était pas présent dans le dossier? –

+0

Un truc stupide que j'utilise est juste un simple écho "hello world" en haut du script ou de l'appel de fonction pour vérifier que je débogue le bon endroit. – adam

0

Le navigateur demande-t-il directement send-email-form.php ou accède-t-il à un autre fichier PHP qui inclut ou nécessite send-email-form.php? Si un autre script l'inclut, vérifiez qu'il n'y a pas de caractères non appariés (parens, guillemets, accolades, etc) dans tout code PHP inclus avant ce fichier, ou dans tout code PHP inline dans le fichier principal .

+0

no. L'URL www.2amgroup.com/employment/attachment_email_form.html est un test pour une forme beaucoup plus grande que j'ai. mais il utilise le même fichier php avec l'ajout de $ body vars pour inclure d'autres informations. vérifiez par vous-même. seulement 1 fichier php étant appelé. –

0

Eh bien, j'ai compris le problème.

Je ne sais pas ce que cela accompli, mais je poussé la ligne 19 jusqu'à la ligne 20 en laissant une ligne vide après la 18 ligne de la fonction GetUploadedFileInfo() {