PHP - Error Strict Standards:

 
Vista:
sin imagen de perfil

Error Strict Standards:

Publicado por Salva (5 intervenciones) el 22/12/2017 23:28:37
Tengo una conexion a un webservice externo. Estoy trabajando con PHP 5.6 desde hace un año con dicha conexión y todo a funcionado bien.

Desde hace un par de dias me sale el siguiente error:

Strict Standards: Only variables should be passed by reference in /customers/7/2/f/sespo.es/httpd.www/zonasocios/pruebaconexion.php on line 22 Strict Standards: Only variables should be passed by reference in /customers/7/2/f/sespo.es/httpd.www/zonasocios/pruebaconexion.php on line 17 Strict Standards: Only variables should be passed by reference in /customers/7/2/f/sespo.es/httpd.www/zonasocios/pruebaconexion.php on line 17 Strict Standards: Only variables should be passed by reference in


y la linea 17 del php que me genera el error es la siguiente:

$phpinfo[end(array_keys($phpinfo))][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3];

En varios foros he leido que suele pasar al actualizarse la version de php a la 5.6, pero como he dicho antes, llevo trabajando con la 5.6 desde hace un año. Tambien he visto en este foro que la manera de solucionarlo es tirando el array a una variable intermedia, pero no he sabido aplicarlo. A que es debido esto, y cual puede ser la solucion?


Os pego el codigo entero por si os sirve de mas ayuda:

1
2
3
4
5
6
7
8
9
10
11
12
13
ob_start();
phpinfo();
$phpinfo = array('phpinfo' => array());
if(preg_match_all('#(?:<h2>(?:<a name=".*?">)?(.*?)(?:</a>)?</h2>)|(?:<tr(?: class=".*?")?><t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>)?)?</tr>)#s', ob_get_clean(), $matches, PREG_SET_ORDER))
    foreach($matches as $match)
        if(strlen($match[1]))
            $phpinfo[$match[1]] = array();
        elseif(isset($match[3]))
  """" Linea que genera el error """""       $phpinfo[end(array_keys($phpinfo))][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3];


		else
            $phpinfo[end(array_keys($phpinfo))][] = $match[2];


Muchas gracias por vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de abzerox
Val: 575
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error Strict Standards:

Publicado por abzerox (157 intervenciones) el 24/12/2017 00:50:58
Hola Salva, el problema esta es que estas pasando una variable por valor a la función end la cual como dice la documentación "El array es pasado por referencia porque es modificado por la función. Esto significa que se debe pasar una variable real y no una función que devuelve un array porque solamente variables puede ser pasadas por referencia. "
1
2
$keys = array_keys($phpinfo);
$phpinfo[end($keys)][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3];

Nos comentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error Strict Standards:

Publicado por Salva (5 intervenciones) el 25/12/2017 20:40:54
Hola abzerox, si que habia leido algo por ahi, pero no he sido capaz de hacerlo. He aplicado el codigo que me has pasado y me devuelve un error 500. Te paso el codigo completo para que lo veas.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?
include_once "nusoap-0.9.5/lib/nusoap.php";
 
error_reporting(E_ALL);
ini_set('display_errors', '1');
 
/////HAY QUE COMPROBAR SI EL SERVIDOR TIENE ACTIVADO EL SISTEMA SOAP O NO//////////
//To extract all of the data from phpinfo into a nested array:
ob_start();
phpinfo();
$phpinfo = array('phpinfo' => array());
if(preg_match_all('#(?:<h2>(?:<a name=".*?">)?(.*?)(?:</a>)?</h2>)|(?:<tr(?: class=".*?")?><t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>)?)?</tr>)#s', ob_get_clean(), $matches, PREG_SET_ORDER))
    foreach($matches as $match)
        if(strlen($match[1]))
            $phpinfo[$match[1]] = array();
        elseif(isset($match[3]))
 
 
		$keys = array_keys($phpinfo);
		$phpinfo[end($keys)][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3];
 
 
         // $phpinfo[end(array_keys($phpinfo))][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3];
 
		else
            $phpinfo[end(array_keys($phpinfo))][] = $match[2];
 
////////////////////////////////////////////////////////////////////////////////////////
///USAR ESTA SI EL SERVIDOR NO TIENE HABILITADA LA EXTENSION SOAP para PHP.
//$client=new soapclient($wsdl, 'wsdl');
///USAR ESTA SI EL SERVIDOR TIENE HABILITADA LA EXTENSION SOAP para PHP.
//$client=new nusoap_client($wsdl, 'wsdl');
 
if ($phpinfo['soap']['Soap Client']=="enabled" && $phpinfo['soap']['Soap Server']=="enabled"){
	$l_oClient = new nusoap_client("http://urlexterna", true); ///CAMBIAR PARA PRODUCCION
}
else{
	$l_oClient = new soapclient("http://urlexterna", true); ///CAMBIAR PARA PRODUCCION
}
 
$l_oProxy  = $l_oClient->getProxy();
 
 
 
$tokenAuth = md5("xxxxxxxxx");
$l_stResult = $l_oProxy->obtenerAccesousuCV($tokenAuth,"xxxxxx","xxxxx","xxxxxx","xxxxx"); ///CAMBIAR PARA PRODUCCION
echo "<BR>ARRAY NORMAL<BR>";
print_r($l_stResult);
echo "<BR><BR>ARRAY EN JSON CON json_encode<BR>";
print json_encode($l_stResult);
echo "<BR><BR>ARRAY EN JSON CON json_encode CON IDENTIFICACION items<BR>";
echo '{"items":'. json_encode($l_stResult) .'}';
?>


Aparte de esto, mi pregunta es,,,si ha estado funcionando durante mas de un año, que cambios pueden haber habido en el servidor para que deje de funcionar?. La version de PHP con la que estoy trabajando, desde el principio, es la 5.6.

Muchas gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar