PHPのFTPアップロード先のパスについて

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,525

rickroufus

score 6

PHPのftp_put()関数を使ったFTPアップロードについて質問です。

さくらインターネットのレンタルサーバー(スタンダードプラン)は、
FTPソフト等を使ってアップロードする時、転送先のパスは、

/www
/home/アカウント名/www

の二通りでアップロードできるとサーバーのマニュアルには書いてあります。
実際、FFFTPでアップロードすると、どちらのパスでもアップロード可能です。

しかし、PHPのftp_put()を使ってファイルを転送する時、
後者の「/home/アカウント名/www」だと正常にアップロードされるのですが、
前者の「/www」では「そんなファイルは無い(No such file or directory in)」という
エラーが出てしまいます。

phpで前者の「/www」のパスでアップロードする方法がもしもあるのであれば、知りたいです。

アップロード元のサーバーはエックスサーバー
アップロード元のPHPのバージョンは5.3.3
(XAMPP v3.2.1(PHP5.6.3)で構築したローカルサーバーでも同じ問題が起きています。)

アップロード先のサーバーはさくらインターネットのスタンダードプラン、
アップロード先のPHPのバージョンは、5.3系ですが、
できれば、5系全般でアップロードできると助かります。

ご回答頂けましたら幸いです。宜しくお願い致します。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

先頭にスラッシュを付けない www でどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/10 01:08

    otn様、ご回答ありがとうございます!

    スラッシュを付けずに、wwwでアップロードしてみても、やはり同じエラーが返されてしまいました。

    キャンセル

  • 2015/09/10 10:31

    他の質問のコメントを見て、質問を誤読してたかなと思いまして、念のために確認ですが、
    「手元のPC上でPHPで書かれたプログラムを実行する。そのプログラムの中でftp_putを行っている」のですよね。つまりさくらサーバー上でのPHPプログラムは無関係ということだと思っているのですが、違いますか?

    キャンセル

  • 2015/09/10 11:15

    otn様、ありがとうございます。
    そうですね。ftp_putを実行するのは、手元のPHPプログラムです。ですので、アップロード先のPHPプログラム自体は無関係だと思います。ただアップロード先の環境の方になんらかの原因がある可能性はあると思います。その辺が、pi-chan様のご回答で、なんとなくは理解できた部分はありますが、現在はっきりとは分かっていない状況です。

    キャンセル

  • 2015/09/10 13:50

    すみません、ローカルだと、otn様が仰っていたように、/(スラッシュ)無しの「www」で接続できました。

    ただ、本番環境のエックスサーバーでは、やはり「www」だと接続出来ないみたいです。ローカルと本番環境でごっちゃになっていて、ローカルでスラッシュ無しを試していたつもりでいました。大変申し訳ないです。

    本番環境のエックスサーバーでは、wwwで接続できないのは、サーバーの設定なのか、PHPのバージョンなのか・・・。一応PHPのバージョンをエックスサーバーで一番高い5.5.19にしてみたのですが、やはり無理なようです。

    キャンセル

0

ちょっと確認ですが、rickroufusさんがPHPで開発しておられるWebサイトルートパス(=コンテキストパス)は、どこになりますか?

ひょっとして /home/アカウント名/www よりも下の階層ではありませんか?

もしそうであれば、Webベースのアプリから /www へアクセスするのは原理的に困難だと思います。

#もっとも、専用サーバーではないので /www と言っても、必ずしも物理サーバーで言う所の /www を指している訳ではないとは思いますが…

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/10 01:06

    pi-chan様、ご回答ありがとうございます!
    私が開発しているサイトのルートパスですが、アップロード先のサイトにて、
    getenv('DOCUMENT_ROOT')でルートパスを取得したところ、
    「/home/アカウント名/www」と出ました。
    アップロード元は、現在はローカルサーバーです。
    一応、ルートパスを書いておきますと「C:\xampp\htdocs\ディレクトリ名」がローカルのルートディレクトリです。

    アップロード先のルートディレクトリからのパスは、「/home/アカウント名/www」だと思います。FFFTPで「/www」と入力してアップロードしても、同じ場所にアップロードされます。

    上記の通りだと思いますが、この場合でも、やはり、「/www」と入力してアップロードするのは原理的に難しい感じでしょうか?

    おっしゃっている意味を勘違いしていたら、大変申し訳ありません。

    キャンセル

  • 2015/09/10 06:35 編集

    さくらインターネットは利用したことがないので推測で書いていますが…
    『FFFTPで「/www」と入力してアップロードしても、同じ場所にアップロードされます。』というのは、要するにFTPクライアントから見た時に、「/www」というパスの表記で「/home/アカウント名/www」へアクセス出来るように「マッピング」されているのだと思います。(パスが短い方が入力し易いので)
    つまり「/www」というのはFTPユーザーの便宜のために『FTPサーバー』側で設定された「仮想のパス」なので、Webアプリからは見えません。
    『同じ場所にアップロード』されるのであれば、FTPでは「/www」へアップロードし、PHP側からは「/home/アカウント名/www」という表記でアクセスするという(あるいはアプリ上は相対パス表記にする)運用で問題ないと考えますがいかがですか?
    通常は『相対パス』で書くのが一般的ですから、「/www」でアクセスしなければならない理由が別にありましたらお知らせください。

    キャンセル

  • 2015/09/10 06:57 編集

    pi-chan様、ご回答ありがとうございます!

    私の想定しているアプリのFTPアップロード機能は、利用者の方が行うことを想定した機能ですので、利用者の方が私のアプリの管理画面上で「/www」と入力してしまった場合、エラーが出るのが困るなぁと思いました。
    勿論、マニュアルに「さくらインターネットを利用する際は、必ず「/home/アカウント名/www」と入力して下さい。」といった内容を記述しておくつもりですが、マニュアルを読まない人も必ず出てくると思いますので、「/www」でアップロード出来る方法があるのであれば、それが一番良いと思いったわけです。

    利用者の方が、さくらインターネットしか使わないというものであれば、別の対処法もあるかと思いますが、様々なサーバーを利用する可能性を考慮したアプリですので、出来ればそのまま「/www」を入力してアップロードできるのが一番助かると考えました。
    やはり、原理的に不可能という感じでしょうか。

    ダメもとではありますが、さくらインターネットの方にも問い合わせてみました。
    回答がありましたらシェアさせて頂きます。

    キャンセル

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

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる