PHPアプリをONLYOFFICE Docsに接続して編集内容を保存する

カスタムPHPアプリケーションは、ONLYOFFICE Docsが取得できるドキュメントURLを提供し、ブラウザでDocs JavaScript APIをロードし、編集されたファイルを保存するコールバックを受け入れることで、ONLYOFFICE Docsと連携します。PHPサーバー上でJWT署名を行い、ドキュメントURLとコールバックURLの両方がONLYOFFICE Docsが稼働しているネットワークからアクセスできるようにしてください。

統合エラーの多くは、ブラウザ、PHP、ドキュメントサーバーが認識するアドレスが混同されていることが原因です。各ルートを、そのルートを使用するネットワークからテストしてください。

PHPアプリとドキュメントサーバーを準備する

ONLYOFFICE Docsはドキュメントエディタを提供します。アプリケーションはドキュメントマネージャーおよびストレージサービスとして機能します。つまり、ユーザー認証、開くことができるファイルの決定、ソースファイルの提供、結果の保存を行います。Document Serverは別途インストールし、/healthcheckアプリケーションコードのデバッグを行う前にエンドポイントを確認してください。

設定には、到達可能なアドレスを3つ使用してください。

  • ドキュメントURL:ユーザーのブラウザがエディタとそのJavaScript APIを読み込むために使用するアドレス。
  • ドキュメントURL:ドキュメントサーバーがPHPストレージからソースファイルをダウンロードするために使用できる絶対アドレス。
  • コールバックURL:ドキュメントサーバーが編集後にPOSTを送信できる絶対アドレス。PHPが変更内容を保存できるようにするため。
DOCXファイルと、その下に埋め込まれたONLYOFFICEエディタを表示する、カスタムPHPプロジェクトファイルページ。
アプリ画面の例:PHPアプリケーションがファイルリストを管理し、そのページ内にONLYOFFICEエディタが開きます。

例えば、https://docs.example.comはエディタを提供し、 はhttps://app.example.com/files/42/downloadPHPhttps://app.example.com/onlyoffice/callbackを指します。ブラウザから Docs および Docs から PHP への接続性をテストします。デプロイメントでは、localhostは現在のマシンまたはコンテナを意味するため、通常はサービス間のアドレスとして間違っています。

承認済みファイルのドキュメント構成を作成する

認証済みのファイルを開くリクエストの場合、PHPバックエンドでファイルのメタデータを読み込み、エディタの設定を構築します。ファイル拡張子、タイトル、絶対ダウンロードURL、およびドキュメントキーを設定します。同じバージョンのエディタが同時に使用される場合は、このキーを固定し、PHPがソースを新しいバージョンに置き換える際に変更します。

<?php
$config = [
  'documentType' => 'word',
  'document' => [
    'fileType' => 'docx',
    'key' => $document['revision_key'],
    'title' => $document['name'],
    'url' => 'https://app.example.com/files/42/download',
    'permissions' => ['edit' => true],
  ],
  'editorConfig' => [
    'callbackUrl' => 'https://app.example.com/onlyoffice/callback',
    'user' => ['id' => (string)$user['id'], 'name' => $user['name']],
  ],
];
ドキュメントの fileType、key、title、URL、および editorConfig の callbackUrl 値を含む PHP config.php のコードビュー。
PHPの設定例:ドキュメントURLとコールバックURLによって、ストレージとエディタが接続されます。

URLを生成する前に、ファイル権限を強制的に適用してください。ストレージの認証情報を公開したり、認証を回避したりしないでください。また、ONLYOFFICEのルールによっては、プライベートリンクやローカルリンクにトークンが必要になる場合があります。

必須項目とAPIスクリプトのパスについては、ONLYOFFICEのドキュメント設定リファレンスおよびセルフホスト型インストールガイドを参照してください。

エディタをロードし、その設定に署名する

JWTとはJSON Web Tokenの略で、ONLYOFFICEが転送中に設定が変更されていないことを検証するための署名付きトークンです。現在のデプロイメントではJWT検証がデフォルトで有効になっています。Docsで設定されているブラウザトークンシークレットと一致するシークレットを使用してエディタ設定に署名してください。セットアップで別の送信トークンシークレットを使用している場合は、その送信ボックスシークレットを使用してコールバックも検証してください。Docs 7.2以降では、Dockerインストールでシークレットが自動的に生成されるため、本番環境では安定したシークレットを設定して保持してください。

ONLYOFFICEの公式署名ガイドには、メンテナンス対象firebase/php-jwtパッケージを使用したPHPコードが記載されています。これをインストールするcomposer require firebase/php-jwtには、以下のコマンドを使用してください。その後、バックエンドで完全な設定に署名してから、ページに返してください。

use Firebase\JWT\JWT;

$secret = getenv('ONLYOFFICE_JWT_SECRET');
if (!$secret) {
    throw new RuntimeException('ONLYOFFICE JWT secret is not configured');
}
$config['token'] = JWT::encode($config, $secret, 'HS256');
PHP sign.php コードは、環境変数から ONLYOFFICE_JWT_SECRET を読み取り、HS256 を使用して設定に署名します。
バックエンドのコード例:サーバーは、ブラウザにJWTシークレットを公開することなく、エディタの設定に署名します。

ブラウザのコードやソース管理から秘密情報を排除してください。https://docs.example.com/web-apps/apps/api/documents/api.js署名済みのJSONを読み込んで、次の場所に渡してくださいDocsAPI.DocEditor。

<div id="editor"></div>
<script src="https://docs.example.com/web-apps/apps/api/documents/api.js"></script>
<script>
  new DocsAPI.DocEditor("editor", <?= $signedConfigJson ?>);
</script>

JSONを安全にエンコードするjson_encodeか、同一オリジンエンドポイントから署名付き設定を取得してください。信頼できない値をJavaScriptに連結しないでください。署名ガイドにはHMAC-SHA256が記載されています。ロードバランシングされたDocs 8.1以降では、APIスクリプトにshardkeyドキュメントに記載されているクエリパラメータを含めることができますが、単一サーバーでは必要ありません。

PHPコールバックを介して変更を保存します

編集後、ドキュメントサーバーはPOSTリクエストを送信しますcallbackUrl。ステータス2は編集が完了し、ファイルの保存準備が整ったことを意味します。ステータス6は強制保存の結果です。コールバックには、編集済みファイルの一時的なダウンロードURLが含まれています。このURLをダウンロードして保存済みのバージョンをアトミックに置き換えるか、アプリのリビジョンポリシーに従って新しいバージョンを作成してください。{"error":0}ストレージへの書き込みが成功した場合にのみ、処理を終了してください。

<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

$raw = file_get_contents('php://input');
$data = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$auth = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
$token = preg_replace('/^Bearer\s+/i', '', $auth);
$claims = JWT::decode($token, new Key($outboxSecret, 'HS256'));
$verified = (array)($claims->payload ?? []);

if (($verified['key'] ?? '') !== ($data['key'] ?? '')) {
    http_response_code(401);
    exit;
}
$document = findDocumentByRevisionKey($verified['key']);
if (!$document) {
    http_response_code(404);
    exit;
}
if (in_array((int)$data['status'], [2, 6], true)) {
    downloadAndStoreFromDocs($data['url'], $document);
}
header('Content-Type: application/json');
echo json_encode(['error' => 0]);
PHPのcallback.phpコードは、編集ステータス2と6を処理し、JSONエラー値としてゼロを返します。
コールバックロジックの例:サポートされている保存ステータスに応じて返されたドキュメントを保存し、処理が成功したことを確認する。

この例では、デフォルトの送信Authorization: BearerJWTヘッダーとそれに一致する送信ボックスシークレットを前提としています。サーバーが異なるヘッダーまたはボディトークンを使用している場合は、適宜修正してください。ダウンロードヘルパーは、Docsホストのみを許可し、応答を確認して、期待されるファイルを安全に置き換える必要があります。任意のURLや署名されていないドキュメントキーを信頼しないでください。

保存が成功したら、JSON を返します{"error":0}。ステータスとペイロードについてはコールバックのリファレンスを、コールバックのタイミングについては保存ライフサイクルを参照してください。

往復旅行全体を確認してください

認証済みユーザーとしてテスト用のDOCXファイルを開き、簡単な編集を行った後、エディタを閉じます。コールバックキーとステータスが目的のファイルと一致していることを確認し、アプリが新しいバイトを保存したことを確認してから、ドキュメントを再度開きます。読み込みに失敗した場合は、APIスクリプトのルートと構成トークンを確認してください。保存に失敗した場合は、コールバックの到達可能性、JWTの検証、JSONレスポンス、およびPHPストレージログを確認してください。

ONLYOFFICEはPHP統合の例とPHPサンプルアプリを公開していますが、サンプル統合にはストレージ認証や保存リクエスト検証といった本番環境向けの保護機能が欠けていることを明示的に警告しています。これらのサンプルはAPIフローを理解するために使用し、アクセスチェックやコールバックのセキュリティは独自のアプリケーションで実装してください。

コメントを残す

PHPアプリをONLYOFFICE Docsに接続して編集内容を保存する

PHPアプリをONLYOFFICE Docsに接続して編集内容を保存する

ONLYOFFICEエディタをPHPアプリケーションに組み込み、JWTで設定に署名し、編集したファイルを安全なコールバック経由で保存します。

ONLYOFFICEのスペルチェックは、選択した言語のままにしておいてください。

ONLYOFFICEのスペルチェックは、選択した言語のままにしておいてください。

文書全体または選択したテキストの校正言語を設定し、スペルチェックが有効になっていることを確認し、サーバー辞書が見つからない場合を特定します。

ドキュメントを再度開いたときに変更履歴を記録する

ドキュメントを再度開いたときに変更履歴を記録する

ONLYOFFICEドキュメント内で、すべてのユーザーに対して永続的な変更履歴の記録を有効にし、編集内容が記録されていることを確認し、この設定の制限事項を理解してください。

ONLYOFFICEのNginx 502エラーを解消するために上流を追跡する

ONLYOFFICEのNginx 502エラーを解消するために上流を追跡する

Nginx、Dockerネットワーク、またはONLYOFFICE内部サービスのいずれかが502エラーを返しているかどうかを確認し、修正されたアップストリームとヘルスチェックを検証します。

ONLYOFFICEがNextcloudに保存しない場合の保存コールバックのトレース

ONLYOFFICEがNextcloudに保存しない場合の保存コールバックのトレース

ONLYOFFICEの保存失敗を診断するには、Nextcloudのコールバックルート、プロキシのリダイレクト、およびストレージログを確認し、編集されたファイルが保持されていることを確認します。

ONLYOFFICEドキュメントサーバーがVPSメモリ不足にならないようにする

ONLYOFFICEドキュメントサーバーがVPSメモリ不足にならないようにする

ONLYOFFICEのメモリクラッシュの原因を特定し、Dockerの制限を確認し、VPSのRAMサイズを正しく設定し、スワップ領域を安全に追加し、ドキュメントが正しく開いて保存されることを確認します。

ONLYOFFICE PDFエクスポートの失敗の原因を特定する

ONLYOFFICE PDFエクスポートの失敗の原因を特定する

ブラウザのダウンロードに関する問題とサーバー側の変換エラーを区別し、適切なログまたはアクセスチェックを使用して、PDFエクスポートが正常に機能するようにしてください。

NextcloudでONLYOFFICEの「トークンが無効です」エラーを解決する

NextcloudでONLYOFFICEの「トークンが無効です」エラーを解決する

ONLYOFFICE DocsとNextcloudで使用されているJWTシークレットを照合し、DockerまたはLinuxインストールに安全に適用し、認証を弱めることなく接続を検証します。

Ubuntu 24.04にONLYOFFICE Workspace Communityをデプロイする

Ubuntu 24.04にONLYOFFICE Workspace Communityをデプロイする

公式のDockerスクリプトを使用して、Ubuntu 24.04にONLYOFFICE Workspace Communityをインストールし、サーバー要件を確認し、必要に応じてメールをスキップし、ポータルが安全に動作することを確認します。

ONLYOFFICE JWTシークレットをサーバーとコネクタ間で設定する

ONLYOFFICE JWTシークレットをサーバーとコネクタ間で設定する

ONLYOFFICE Docsとそのコネクタに対応するJWTシークレットを設定します。Linuxパッケージ、Dockerデプロイメント、および検証のための安全な手順も含まれています。