Php7 laravelプロジェクトでDigital Oceanスペースを使用しようとしています。コードは、ファイルをロードしてディレクトリにコピーするのは非常に簡単です。すべてがローカルマシンで機能しますが、このエラーのあるデジタルオーシャンサーバー
クラス 'SimpleXMLElement'が見つかりません
Digital Oceanサーバー上でも、tinkerを使用して同じストレージコマンドを実行すると、正常に機能します。何が問題になりますか?
私のget_loaded_extensions()
はget_loaded_extensions()を返します
[
"Core",
"date",
"libxml",
"openssl",
"pcre",
"zlib",
"filter",
"hash",
"pcntl",
"Reflection",
"SPL",
"session",
"standard",
"mysqlnd",
"PDO",
"xml",
"apcu",
"calendar",
"ctype",
"curl",
"dom",
"mbstring",
"fileinfo",
"ftp",
"Gd",
"gettext",
"iconv",
"json",
"exif",
"mysqli",
"pdo_mysql",
"Phar",
"posix",
"readline",
"shmop",
"SimpleXML",
"sockets",
"sysvmsg",
"sysvsem",
"sysvshm",
"tokenizer",
"wddx",
"xmlreader",
"xmlrpc",
"xmlwriter",
"xsl",
"Zip",
"Zend OPcache",
]
xmlとsimplexmlがインストールされているように見えます。 link 、php-xml
およびphp-simplexml
をインストールする必要があります。何かを個別にインストールする必要がありますか?
また、ファイルのアップロードコードは次のようになります
public function uploadNew($file, $title, User $user)
{
if (!File::directoryExists($user->username)) {
Storage::makeDirectory($user->username);
}
$completeFileName = $user->username.'/'.$title.time();
Storage::put($completeFileName, file_get_contents($file), 'public');
$this->url = File::baseUrl().$completeFileName;
$this->title = $title;
$this->user_id = $user->id;
$this->save();
return $this;
}
public static function baseUrl()
{
return 'https://'.env('DO_SPACES_BUCKET').'.nyc3.digitaloceanspaces.com/';
}
public static function directoryExists($directory)
{
$existingDirs = Storage::directories();
return in_array($directory, $existingDirs);
}
例外のスタックトレースを追加します。
(1/1) FatalThrowableError
Class 'SimpleXMLElement' not found
in PayloadParserTrait.php (line 39)
at RestXmlParser->parseXml(object(Stream))
in RestXmlParser.php (line 33)
at RestXmlParser->payload(object(Response), object(StructureShape), array())
in AbstractRestParser.php (line 62)
at AbstractRestParser->__invoke(object(Command), object(Response))
in RetryableMalformedResponseParser.php (line 37)
at RetryableMalformedResponseParser->__invoke(object(Command), object(Response))
in AmbiguousSuccessParser.php (line 58)
at AmbiguousSuccessParser->__invoke(object(Command), object(Response))
in GetBucketLocationParser.php (line 30)
at GetBucketLocationParser->__invoke(object(Command), object(Response))
in WrappedHttpHandler.php (line 126)
at WrappedHttpHandler->parseResponse(object(Command), object(Request), object(Response), array())
in WrappedHttpHandler.php (line 93)
at WrappedHttpHandler->Aws\{closure}(object(Response))
in Promise.php (line 203)
以下を使用して、インストールされているphpのバージョンを確認します。
$ php -v
バージョン7の場合、インストール php7.0-xml
バージョン7.2。*の場合、使用 php7.2-xml phpと一緒にマシンにパッケージします。
Php-xmlパッケージをインストールするだけです。参考として、追加のphpライブラリをすべてインストールするだけです。
apt-get install php-pear php7.2-curl php7.2-dev php7.2-Gd php7.2-mbstring php7.2-Zip php7.2-mysql php7.2-xml
最後に、私は同じことに従う必要がありました answer 質問で言及しました。 php7.0-xmlとsimplexmlをインストールし、Apacheサーバーを再起動して動作させる必要がありました。そのため、ロードされた拡張機能でxmlおよびsimplexmlがインストール済みとして表示されている場合でも、php7.0-xmlおよびsimplexmlをインストールする必要があります。
Xml要素クラスを呼び出すには、\ slashをSimpleXMLElementの前(laravel内)に配置する必要があります
$url = "https://abc.xyz.com";
$response = file_get_contents($url);
$xmlDoc = new \SimpleXMLElement($response);