web-dev-qa-db-ja.com

クラス 'SimpleXMLElement'が見つかりません

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がインストールされているように見えます。 linkphp-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)
8
AmrataB

以下を使用して、インストールされているphpのバージョンを確認します。

$ php -v

バージョン7の場合、インストール php7.0-xml

バージョン7.2。*の場合、使用 php7.2-xml phpと一緒にマシンにパッケージします。

9
nandal

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

6
max johnson

最後に、私は同じことに従う必要がありました answer 質問で言及しました。 php7.0-xmlとsimplexmlをインストールし、Apacheサーバーを再起動して動作させる必要がありました。そのため、ロードされた拡張機能でxmlおよびsimplexmlがインストール済みとして表示されている場合でも、php7.0-xmlおよびsimplexmlをインストールする必要があります。

3
AmrataB

Xml要素クラスを呼び出すには、\ slashをSimpleXMLElementの前(laravel内)に配置する必要があります

$url = "https://abc.xyz.com";
$response = file_get_contents($url);
$xmlDoc = new \SimpleXMLElement($response);
2
Piyush Sharma