私は絞り込むことができないような問題に遭遇しています。 Zend Frameworkアプリケーションでは、Zend Cacheを使用してカスタム応答オブジェクトに含まれている潮汐データと気象データをキャッシュしています。データが最初に作成された時点で、すべて正常に動作します。それをシリアル化してキャッシュします。それから私はリフレッシュを打つ、それはキャッシュからデータを引き出したときに、私は次のエラーを取得する:奇妙な動作オブジェクトをシリアライズしてキャッシュする
Message: String could not be parsed as XML
Stack trace:
0 /home/cillosis/mysites/tidely/application/views/scripts/tides/location.phtml(38): SimpleXMLElement->__construct('')
1 /home/cillosis/mysites/tidely/library/Zend/View.php(108): include('/home/cillosis/...')
2 /home/cillosis/mysites/tidely/library/Zend/View/Abstract.php(888): Zend_View->_run('/home/cillosis/...')
...
これは私がこれで「レスポンスオブジェクト」私のカスタムに含まれるXMLをアクセスしていますが私の見解で発生します。
ここで<div class="data-box">
<h3>Current Weather</h3>
<hr>
<?php
// *** THIS IS LINE 38 ***
$weather_XML = new SimpleXMLElement($this->response->_weatherdata->weatherResults);
$params = $weather_XML->data->parameters;
$img_path = $params->{'conditions-icon'}->{'icon-link'};
echo("<img src='".$img_path."'>");
...
は(前キャッシュへの)最初の実行上のオブジェクトの関連部分のダンプです:
あなたが「...」他のXMLデータがたくさんある参照["_weatherdata"]=>
object(Tidely_WeatherData)#79 (6) {
["weatherResults"]=>
string(6399) "<?xml version="1.0"?>
<dwml version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd">
...
</dwml> "
。 XMLはNWS(National Weather Service)APIから来ており、XMLバリデーターで実行しました。エラーは表示されません。問題は、オブジェクトをシリアル化してキャッシュするとすぐに発生します。ここで私は私のZendのキャッシュを設定している方法です。
// Setup caching
$frontendOptions = array('lifeTime' => 30, 'automatic_seralization' => false);
$backendOptions = array('cache_dir' => '../application/cache');
$this->_cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
私はこれで、キャッシングと取得をしています:
// Assign cache id
// Example query: "Chesapeake Bay Virginia"
$cache_id = 'request_results_' . $this->response->_querydata->query);
$cache_id = str_replace(' ', '_', $cache_id);
$cache_id = str_replace('-', '_', $cache_id);
// Check cache for this query
if (($results = $this->_cache->load($cache_id)) === false)
{
// Cache not found, process request and generate response
...
// Cache request output for specific query
$serialized_data = serialize($this->response);
$this->_cache->save($serialized_data, $cache_id);
// Return processed request results
return $this->response;
}
else
{
// Return results from cache
return unserialize($results);
}
私は要求を作成し、それをキャッシュしたら、このような$this->response
オブジェクト出力を:
object(Tidely_ResponseData)#65 (7) { ["_querydata"]=> object(Tidely_QueryData)#66 (9) { ["query"]=> string(40) "bayou-la-batre-mississippi-sound alabama" ["source"]=> string(15) "TidesController" ["request_type"]=> string(3) "url" ["url_components"]=> array(2) { ["state"]=> string(7) "alabama" ["location"]=> string(32) "bayou-la-batre-mississippi-sound" } ["return_type"]=> string(4) "JSON" ["time_range"]=> array(2) { ["start"]=> object(DateTime)#64 (3) { ["date"]=> string(19) "2012-04-05 18:06:51" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } ["end"]=> object(DateTime)#63 (3) { ["date"]=> string(19) "2012-04-06 18:06:51" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } } ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL } ["_locationdata"]=> object(Tidely_LocationData)#80 (31) { ["location_id"]=> string(5) "18921" ["station_name"]=> string(33) "Bayou La Batre, Mississippi Sound" ["station_url_name"]=> string(32) "bayou-la-batre-mississippi-sound" ["station_type"]=> string(11) "Subordinate" ["station_id"]=> string(7) "8739051" ["station_lat"]=> string(8) "+30.3717" ["station_lon"]=> string(8) "-88.2750" ["station_height_offset_high"]=> string(5) "*1.23" ["station_height_offset_low"]=> string(5) "*1.23" ["station_time_offset_high"]=> string(3) "112" ["station_time_offset_low"]=> string(2) "74" ["station_ref_station_id"]=> string(7) "8760551" ["state_id"]=> string(1) "1" ["state_name"]=> string(7) "Alabama" ["state_url_name"]=> string(7) "alabama" ["timezone"]=> string(2) "-6" ["dst"]=> string(1) "1" ["city_name"]=> string(14) "Bayou La Batre" ["city_zip"]=> string(5) "36509" ["city_lat"]=> string(7) "30.4014" ["city_lon"]=> string(8) "-88.2467" ["adjacentStations"]=> string(321) "a:10:{i:8739051;d:2.6562027890531361;s:7:"TEC4393";d:8.0529290086617618;i:8740448;d:11.564338218805837;i:8735180;d:14.637787569358004;i:8741196;d:17.602722038773138;i:8734635;d:17.824002491920826;i:8733810;d:19.474837234444919;i:8737048;d:24.414028460259932;i:8742221;d:27.466706516499691;i:8731952;d:31.251405048051701;}" ["city_distance"]=> string(15) "2.6562027890531" ["multipleResults"]=> string(0) "" ["multipleCount"]=> int(0) ["hasMultiple"]=> bool(false) ["showStates"]=> bool(false) ["showLocations"]=> bool(false) ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL } ["_tidedata"]=> object(Tidely_TideData)#68 (6) { ["tideResults"]=> NULL ["queryStart"]=> NULL ["queryEnd"]=> NULL ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL } ["_weatherdata"]=> object(Tidely_WeatherData)#79 (6) { ["weatherResults"]=> string(6399) " meteorological forecast 2012-04-05T18:06:57Z http://graphical.weather.gov/xml/ Meteorological Development LaboratoryProduct Generation Branch http://www.nws.noaa.gov/disclaimer.html http://www.weather.gov/ http://www.weather.gov/images/xml_logo.gif http://www.weather.gov/feedback.php point1 http://forecast.weather.gov/MapClick.php?textField1=30.37&textField2=-88.28 k-p24h-n1-1 2012-04-05T08:00:00-05:00 2012-04-05T20:00:00-05:00 k-p24h-n1-2 2012-04-05T20:00:00-05:00 2012-04-06T09:00:00-05:00 k-p3h-n5-3 2012-04-05T13:00:00-05:00 2012-04-05T16:00:00-05:00 2012-04-05T19:00:00-05:00 2012-04-05T22:00:00-05:00 2012-04-06T01:00:00-05:00 Daily Maximum Temperature 81 Daily Minimum Temperature 63 Temperature 79 79 74 69 67 Dew Point Temperature 66 65 64 64 61 Wind Speed 12 11 11 13 14 Wind Direction 240 260 280 300 330 Relative Humidity 64 63 71 84 81 Weather Type, Coverage, and Intensity Conditions Icons http://forecast.weather.gov/images/wtf/tsra60.jpg http://forecast.weather.gov/images/wtf/tsra60.jpg http://forecast.weather.gov/images/wtf/scttsra60.jpg http://forecast.weather.gov/images/wtf/nscttsra20.jpg http://forecast.weather.gov/images/wtf/nsct.jpg " ["queryStart"]=> float(1333649211.6989) ["queryEnd"]=> float(1333649217.2038) ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL } ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL }
I ソースの表示が、私はそれので、それをコピーして貼り付けていないよと、「weatherResults」セクションには、そこにXMLを持っていますむしろ長い。/unserializingをシリアライズし、キャッシュを保存するプロセスでは
object(Tidely_ResponseData)#65 (7) { ["_querydata"]=> object(Tidely_QueryData)#66 (9) { ["query"]=> string(40) "bayou-la-batre-mississippi-sound alabama" ["source"]=> string(15) "TidesController" ["request_type"]=> string(3) "url" ["url_components"]=> array(2) { ["state"]=> string(7) "alabama" ["location"]=> string(32) "bayou-la-batre-mississippi-sound" } ["return_type"]=> string(4) "JSON" ["time_range"]=> array(2) { ["start"]=> object(DateTime)#64 (3) { ["date"]=> string(19) "2012-04-05 18:10:30" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } ["end"]=> object(DateTime)#63 (3) { ["date"]=> string(19) "2012-04-06 18:10:30" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } } ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL } ["_locationdata"]=> object(Tidely_LocationData)#67 (31) { ["location_id"]=> string(0) "" ["station_name"]=> string(0) "" ["station_url_name"]=> string(0) "" ["station_type"]=> string(0) "" ["station_id"]=> string(0) "" ["station_lat"]=> string(0) "" ["station_lon"]=> string(0) "" ["station_height_offset_high"]=> string(0) "" ["station_height_offset_low"]=> string(0) "" ["station_time_offset_high"]=> string(0) "" ["station_time_offset_low"]=> string(0) "" ["station_ref_station_id"]=> string(0) "" ["state_id"]=> string(0) "" ["state_name"]=> string(0) "" ["state_url_name"]=> string(0) "" ["timezone"]=> string(0) "" ["dst"]=> string(0) "" ["city_name"]=> string(0) "" ["city_zip"]=> string(0) "" ["city_lat"]=> string(0) "" ["city_lon"]=> string(0) "" ["adjacentStations"]=> string(0) "" ["city_distance"]=> string(0) "" ["multipleResults"]=> string(0) "" ["multipleCount"]=> int(0) ["hasMultiple"]=> bool(false) ["showStates"]=> bool(false) ["showLocations"]=> bool(false) ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL } ["_tidedata"]=> object(Tidely_TideData)#68 (6) { ["tideResults"]=> NULL ["queryStart"]=> NULL ["queryEnd"]=> NULL ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL } ["_weatherdata"]=> object(Tidely_WeatherData)#69 (6) { ["weatherResults"]=> NULL ["queryStart"]=> NULL ["queryEnd"]=> NULL ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL } ["hasError"]=> bool(false) ["userMessage"]=> NULL ["logMessage"]=> NULL }
、それは何らかの形で空またはNULLするすべての文字列を設定します。ここで私はリフレッシュを押すと、それは上記目的のキャッシュされたコピーを使用したときに何が起こるかです!だからもちろん、私は空であるので、XMLエラーを取得しています。
誰かがZend Cache(またはその他のキャッシングライブラリについて)のオブジェクトをキャッシュする際に問題に遭遇しましたか?これはシリアル化と関係がありますか?キャッシュ設定がありませんか?長い説明を申し訳ありませんし、事前にあなたの助けをありがとう!
XMLは** ** SimpleXMLオブジェクトではありません。これは、APIコールから返される文字列で、これは '[" weatherResults "] => string(6399)" ... "'から見ることができます。私はPHPリソースをシリアライズできないことを認識しています。これは標準オブジェクトであり、エラーをスローせずに正常にシリアル化します。他のアイデア? –
さて、私はあなたにstacktraceを読んでいるだけですが、間違っているかもしれませんが、SimpleXMLオブジェクトをシリアライズしようとしているようです: '0/home/cillosis/mysites/tidely/application/views/scripts/tides/location.phtml(38):SimpleXMLElement - > __ construct( '')。デバッガは何を言っていますか? 38行目には何がありますか? – Liyali
いいえ、私はそうではありません。上記の編集で、文字列値 '$ this-> response - > _ weatherdata-> weatherResults'からSimpleXMLオブジェクトを作成してください。非直列化は、私がキャッシングを行う場所の上のコードのビットで行われます。シリアライゼーション/シリアライゼーションのある時点でオブジェクトをリセットしています(より良い単語がないため)。これは、PHPでキャッシュしている間に初めてこの問題に遭遇したときです。 –