Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Lembram-se desse problema? Pois então, um amigo me ajudou a fazer uma solução mais limpa e sensata.
Mas ela só funciona nos testes, com valores de parâmetro sendo passados manualmente. Quando implemento no sistema "oficial", retorna outra coisa totalmente diferente.
Primeiro a solução:
function diff( $cache ) {
return array_udiff( $cache, $this -> data['files'],
function( array $cache, array $files ) {
return strcmp( $cache['checksum'], $files['checksum'] );
}
);
}
Óbviamente, um método de classe. array_udiff() computa a diferença do parâmetro $cache com um índice de uma propriedade, pelos checksums.
Esta propriedade é:
$this -> data = array( 'files' => array( array( 'filepath' => 'C:/Program Files/Zend/Apache2/htdocs/blog/wp-content/themes/Imaggens/admin/application/controllers/AdvertisementController.php',
'checksum' => '928c5e3bd0c5f8d3613fce7a3bdc9dac',
//928c5e3bd0c5f8d3613fce7a3bdc9dac - original
//42ab4fc2af91337be03ce1cb7f4fd837 - alterado
'filename' => 'AdvertisementController.php',
),
array( 'filepath' => 'C:/Program Files/Zend/Apache2/htdocs/blog/wp-content/themes/Imaggens/admin/application/controllers/HomeController.php',
'checksum' => '28cbf3c60752631a3fa87e427e35afb6',
'filename' => 'HomeController.php',
),
array( 'filepath' => 'C:/Program Files/Zend/Apache2/htdocs/blog/wp-content/themes/Imaggens/admin/library/Zend/Controller/Request/Exception.php',
'checksum' => 'ef458d8a75cc650d9cbf90ff89df9012',
'filename' => 'Exception.php',
),
),
);
Esse é meu...digamos... Modo Debug, para evitar fazer uma requisição POST só para testar, afinal, por enquanto array_udiff() comparará dois arrays de mais de 400 índices, todo mundo contra todo mundo.
Enfim...
Se eu invocar o método diff() e passar como argumento esse array:
$cache = array( array( 'filepath' => 'wordpress/themes/Corporative/admin/application/controllers/AdvertisementController.php',
'checksum' => '928c5e3bd0c5f8d3613fce7a3bdc9dac',
'filename' => 'AdvertisementController.php' ),
array( 'filepath' => 'wordpress/themes/Corporative/admin/application/controllers/BugsController.php',
'checksum' => '928ec3fb60a648aeeb62c98408af642c',
'filename' => 'BugsController.php' ),
);
Funciona perfeitamente. Se passo o array REAL, um arquivo de cache com um array serializado, com todos os índices disponíveis, o retorno é todo o array de cache, sem os índices da comparação.
Essa última frase ficou um horror de se entender, mas no arquivo anexo ficará bem mais simples de entender.
[Anexos - MediaFire]
Arquivo de Cache - Texto Plano
Com o array "manual" fica perfeito. Retorna as informações dos checksums diferentes, mesmo que ele (índice) não exista no segundo array, o que é vital.
Já no segundo não. Pior é que estruturalmente, $cache (manual) e $cache2 (arquivo serializado) são dois array idênticos, salvo pela quantidade de índices.
Carregando comentários...