質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

470閲覧

【PHP】simple_xml_stringの動作が環境によって変わってしまう問題

muteki_gamer

総合スコア157

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/07/06 02:03

編集2020/07/06 02:06

simple_xml_string関数返り値が開発環境と本番環境で同じでない為に、デプロイでバグとなってしまっています。
おそらく本番環境のEC2での環境構築で足りないものがあると考えています。

開発環境

  • Docker
  • PHP-fpm 7.3.19
  • phpinfoで simplexml support enabled確認

本番環境

  • EC2 Amazon Linux 2
  • PHP 7.3.17
  • phpinfoではsimplexml support enabled確認
  • additional .iniファイルが存在 中身は以下の1行

extension=simplexml

コード

php

1<?php 2 3$xml = <<< EOF 4<?xml version="1.0" encoding="UTF-8"?> 5<Response> 6 <Timestamp>2020-07-06T01:29:26.096Z</Timestamp> 7 <Ack>Success</Ack> 8 <Build>E1141_CORE_APILW_19170841_R1</Build> 9 <Version>1141</Version> 10 <Summary> 11 <ShippingCost currencyID="USD">24.02</ShippingCost> 12 <ImportCharge currencyID="USD">0.0</ImportCharge> 13 </Summary> 14</Response> 15EOF; 16 17$objXml = simplexml_load_string($xml, NULL, LIBXML_NOCDATA); 18 19echo "<pre>"; 20var_dump($objXml); 21echo "</pre>"; 22

出力の違い

開発環境

object(SimpleXMLElement)#34 (5) { ["Timestamp"]=> string(24) "2020-07-06T01:29:26.096Z" ["Ack"]=> string(7) "Success" ["Build"]=> string(28) "E1141_CORE_APILW_19170841_R1" ["Version"]=> string(4) "1141" ["Summary"]=> object(SimpleXMLElement)#38 (2) { ["ShippingCost"]=> string(5) "24.02" ["ImportCharge"]=> string(3) "0.0" } }

本番環境

object(SimpleXMLElement)#34 (5) { ["Timestamp"]=> string(24) "2020-07-06T01:29:26.096Z" ["Ack"]=> string(7) "Success" ["Build"]=> string(28) "E1141_CORE_APILW_19170841_R1" ["Version"]=> string(4) "1141" ["Summary"]=> object(SimpleXMLElement)#38 (2) { ["ShippingCost"]=> object(SimpleXMLElement)#40 (2) { ["@attributes"]=> array(1) { ["currencyID"]=> string(3) "USD" } [0]=> string(5) "24.02" } ["ImportCharge"]=> object(SimpleXMLElement)#33 (2) { ["@attributes"]=> array(1) { ["currencyID"]=> string(3) "USD" } [0]=> string(3) "0.0" } } }

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

SimpleXMLElement::attributes

SimpleXMLはvar_dumpを使わない方がよいということみたいですね。

以下参考になるのではないでしょうか。
PHPでXMLを解析するときに注意すること

投稿2020/07/06 02:38

hayato7

総合スコア1135

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

muteki_gamer

2020/07/06 02:47

回答ありがとうございます。 なるほど難しいですね。開発環境でも取得はできていて、attributesメソッドで存在する場所に対してアクセスしないといけない感じなんですね。 環境によって配列として取得できるデータが変わってくるのは謎ですね。 こちらの記事のコメント欄でphpのバージョンの話が出てましたが、今回は両方7.3なのでよくわからないですね。 https://qiita.com/yasumodev/items/74a73ed4b3f1dd45edb8
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問