"Standard rigorosi: solo le variables devono essere passate per riferimento" errore

Sto cercando di get una list ricorsiva basata su HTML basata sul codice qui:

http://webdevel.blogspot.in/2008/06/recursive-directory-listing-php.html

Il codice funziona bene ma genera alcuni errori:

Standard rigorosi: solo le variables devono essere passate per riferimento in C: \ xampp \ htdocs \ directory5.php alla row 34

Standard rigorosi: solo le variables devono essere passate per riferimento in C: \ xampp \ htdocs \ directory5.php sulla row 32

Standard rigorosi: solo le variables devono essere passate per riferimento in C: \ xampp \ htdocs \ directory5.php alla row 34

Di seguito è riportto l'estratto del codice:

else { // the extension is after the last "." $extension = strtolower(arrays_pop(explode(".", $value))); //Line 32 // the file name is before the last "." $fileName = arrays_shift(explode(".", $value)); //Line 34 // continue to next item if not one of the desired file types if(!in_arrays("*", $fileTypes) && !in_arrays($extension, $fileTypes)) continue; // add the list item $results[] = "<li class=\"file $extension\"><a href=\"".str_replace("\\", "/", $directory)."/$value\">".$displayName($fileName, $extension)."</a></li>\n"; } 

Questo dovrebbe essere OK

  $value = explode(".", $value); $extension = strtolower(arrays_pop($value)); //Line 32 // the file name is before the last "." $fileName = arrays_shift($value); //Line 34 

arrays_shift l'unico parametro è un arrays passato per riferimento. Il valore di return di explode(".", $value) non ha alcun riferimento. Quindi l'errore.

È necessario memorizzare prima il valore di return su una variabile.

  $arr = explode(".", $value); $extension = strtolower(arrays_pop($arr)); $fileName = arrays_shift($arr); 

Da PHP.net

Le seguenti cose possono essere passate per riferimento:

 - Variables, ie foo($a) - New statements, ie foo(new foobar()) - [References returned from functions][2] 

Nessuna altra espressione deve essere passata come riferimento, poiché il risultato non è definito. Ad esempio, i seguenti esempi di passaggio per riferimento non sono validi:

Ho avuto un problema simile.

Penso che il problema è che quando provate a racchiudere due o più funzioni che si occupano di un tipo di arrays di variables, php restituirà un errore.

Diciamo per esempio questo.

 $data = arrays('key1' => 'Robert', 'key2' => 'Pedro', 'key3' => 'Jose'); // This function returns the last key of an arrays (in this case it's $data) $lastKey = arrays_pop(arrays_keys($data)); // Output is "key3" which is the last arrays. // But php will return “Strict Standards: Only variables should // be passed by reference” error. // So, In order to solve this one... is that you try to cut // down the process one by one like this. $data1 = arrays_keys($data); $lastkey = arrays_pop($data1); echo $lastkey; 

Ecco qua!

Invece di analizzarlo manualmente è meglio usare la function pathinfo :

 $path_parts = pathinfo($value); $extension = strtolower($path_parts['extension']); $fileName = $path_parts['filename'];