Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Strict Standards: Only variables should be passed by reference" error [duplicate]

Tags:

php

I am trying to get an HTML-based recursive directory listing based on code here:

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

Code runs fine but it throws some errors:

Strict Standards: Only variables should be passed by reference in C:\xampp\htdocs\directory5.php on line 34

Strict Standards: Only variables should be passed by reference in C:\xampp\htdocs\directory5.php on line 32

Strict Standards: Only variables should be passed by reference in C:\xampp\htdocs\directory5.php on line 34

Below is the excerpt of code:

else   {    // the extension is after the last "."    $extension = strtolower(array_pop(explode(".", $value)));   //Line 32     // the file name is before the last "."    $fileName = array_shift(explode(".", $value));  //Line 34     // continue to next item if not one of the desired file types    if(!in_array("*", $fileTypes) && !in_array($extension, $fileTypes)) continue;     // add the list item    $results[] = "<li class=\"file $extension\"><a href=\"".str_replace("\\", "/",     $directory)."/$value\">".$displayName($fileName, $extension)."</a></li>\n";   } 
like image 857
user1184100 Avatar asked Mar 24 '12 01:03

user1184100


2 Answers

This should be OK

   $value = explode(".", $value);    $extension = strtolower(array_pop($value));   //Line 32    // the file name is before the last "."    $fileName = array_shift($value);  //Line 34 
like image 167
haltabush Avatar answered Sep 20 '22 15:09

haltabush


array_shift the only parameter is an array passed by reference. The return value of explode(".", $value) does not have any reference. Hence the error.

You should store the return value to a variable first.

    $arr = explode(".", $value);     $extension = strtolower(array_pop($arr));        $fileName = array_shift($arr); 

From PHP.net

The following things can be passed by reference:

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

No other expressions should be passed by reference, as the result is undefined. For example, the following examples of passing by reference are invalid:

like image 33
Shiplu Mokaddim Avatar answered Sep 18 '22 15:09

Shiplu Mokaddim