Подобная ошибка начала появляться при переходе на версию PHP 5.3, в которой запрещён вызов функции с параметром — константой, если функция ожидает на этом месте ссылки на переменную.
Приведу простой пример. Скажем, у нас есть функция, которая ожидает ссылку на переменную $b:
function myfunc($a, &$b) { // Что-то делаем }
Если мы будем вызывать эту функцию, подставляя на место второго параметра фиксированное значение (константу), то получим ошибку Strict Standards: Only variables should be passed by in … :
myfunc(1, 5); // Выдаст ошибку
Для того, чтобы устранить данную ошибку, не меняя логику программы, необходимо заменить параметр 5 на переменную, равную этому значению:
$mm = 5; myfunc(1, $mm); // Нет ошибки
В этом случае всё верно — функция получит ссылку на переменную и никакого нарушения стандартов не произойдёт.
Другая распространённая причина возникновения подобной ошибки — это передача на вход функций, требующих указателя на переменную, результата выполнения другой функции. Вот пример:
$r = end(explode('/', $n)); // Выдаст ошибку
В данном случае мы видим как результат работы функции explode() передаётся непосредственно как параметр в функцию end(). Но функция end() работает с указателем на массив, а не со значением массива. Поэтому тут также будет выведена ошибка.
Решение такое же как и в прошлом примере:
$temp1 = explode('/', $n); $r = end($temp1);
То есть сперва мы переносим значение в настоящую переменную, и только потом передаём в end() указатель на эту переменную.
Собственно все ошибки подобного рода решаются именно таким образом. Если в вашей программе где-то стала вылетать вышеуказанная ошибка, то просто создавайте временную переменную там, где ошибочно передаётся константа.
Кстати, если вам интересно зачем нужны ссылки на переменные и чем это отличается от простой передачи переменной, то читайте следующую статью.