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

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

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

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

PHP

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

Q&A

3回答

5356閲覧

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

rickroufus

総合スコア9

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

PHP

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

0グッド

0クリップ

投稿2015/09/09 13:47

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系全般でアップロードできると助かります。

ご回答頂けましたら幸いです。宜しくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/01/15 03:26

いずれか片方(契約時期による)じゃなかったけ
guest

回答3

0

phpコードがないのと、ディレクトリ構造がわからないので推測でしかないですが…
/wwwという書き方は、ルート(/)からwwwと言うディレクトリを参照します。
今回の場合は、./wwwという書き方でいけませんか?
これは、カレントディレクトリ(./)から、wwwというディレクトリを参照します。
カレントディレクトリとは、プログラムを実行している階層です。
この書き方は、
/home/アカウント名/
と言うディレクトリにプログラムがあり、
/home/アカウント名/www
と言うディレクトリにアクセスしたい時に正常に働きます

まず、ルートパスの意味をわかってますか?
ルートは、階層の一番下、ルートより下の階層はありません。
/wwwという書き方は、ルートからwwwというディレクトリを探しています。
なぜこの書き方だとそうなるのかを説明すると、プログラムで使用するパスの左から1文字目に/が来る場合、その/はルートといって、それ以上下の階層は存在しない場所という意味です。
これは覚えてないとパス指定に苦労するのでおぼえておきましょう。
このルールで考えた時、
/wwwとは、ルート(/)=>www というディレクトリを見ようとします。
これが原因です。
なぜFTPで/wwwでいけるかというと、FTPアカウントには、ドキュメントルートというルートとは別の設定がしてあり、FTP接続時にはFTPアカウントのドキュメントルート(/home/アカウント名/)がルート(/)の代わりになってくれるから、wwwにアクセスできるのです。
これをわかりやすくいうと、
ルート(ドキュメントルート(/home/アカウント名/))=>wwwを参照するので、アクセスできるのです。

投稿2020/01/15 03:04

編集2020/01/15 03:19
TeamPassionall

総合スコア80

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

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

0

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

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

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

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

投稿2015/09/09 15:15

pi-chan

総合スコア5936

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

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

rickroufus

2015/09/09 16:06

pi-chan様、ご回答ありがとうございます! 私が開発しているサイトのルートパスですが、アップロード先のサイトにて、 getenv('DOCUMENT_ROOT')でルートパスを取得したところ、 「/home/アカウント名/www」と出ました。 アップロード元は、現在はローカルサーバーです。 一応、ルートパスを書いておきますと「C:\xampp\htdocs\ディレクトリ名」がローカルのルートディレクトリです。 アップロード先のルートディレクトリからのパスは、「/home/アカウント名/www」だと思います。FFFTPで「/www」と入力してアップロードしても、同じ場所にアップロードされます。 上記の通りだと思いますが、この場合でも、やはり、「/www」と入力してアップロードするのは原理的に難しい感じでしょうか? おっしゃっている意味を勘違いしていたら、大変申し訳ありません。
pi-chan

2015/09/09 21:37 編集

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

2015/09/09 21:58 編集

pi-chan様、ご回答ありがとうございます! 私の想定しているアプリのFTPアップロード機能は、利用者の方が行うことを想定した機能ですので、利用者の方が私のアプリの管理画面上で「/www」と入力してしまった場合、エラーが出るのが困るなぁと思いました。 勿論、マニュアルに「さくらインターネットを利用する際は、必ず「/home/アカウント名/www」と入力して下さい。」といった内容を記述しておくつもりですが、マニュアルを読まない人も必ず出てくると思いますので、「/www」でアップロード出来る方法があるのであれば、それが一番良いと思いったわけです。 利用者の方が、さくらインターネットしか使わないというものであれば、別の対処法もあるかと思いますが、様々なサーバーを利用する可能性を考慮したアプリですので、出来ればそのまま「/www」を入力してアップロードできるのが一番助かると考えました。 やはり、原理的に不可能という感じでしょうか。 ダメもとではありますが、さくらインターネットの方にも問い合わせてみました。 回答がありましたらシェアさせて頂きます。
TeamPassionall

2020/01/15 03:17

まず、ルートパスの意味をわかってますか? ルートは、階層の一番下、ルートより下の階層はありません。 回答にも書きましたが、 /wwwという書き方は、ルートからwwwというディレクトリを探しています。 なぜこの書き方だとそうなるのかを説明すると、プログラムで使用するパスの左から1文字目に/が来る場合、その/はルートといって、それ以上下の階層は存在しない場所という意味です。 これは覚えてないとパス指定に苦労するのでおぼえておきましょう。 このルールで考えた時、 /wwwとは、ルート(/)=>www というディレクトリを見ようとします。 これが原因です。 なぜFTPで/wwwでいけるかというと、FTPアカウントには、ドキュメントルートというルートとは別の設定がしてあり、FTP接続時にはFTPアカウントのドキュメントルート(/home/アカウント名/)がルート(/)の代わりになってくれるから、wwwにアクセスできるのです。 これをわかりやすくいうと、 ルート(ドキュメントルート(/home/アカウント名/))=>wwwを参照するので、アクセスできるのです。
guest

0

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

投稿2015/09/09 15:01

otn

総合スコア84507

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

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

rickroufus

2015/09/09 16:08

otn様、ご回答ありがとうございます! スラッシュを付けずに、wwwでアップロードしてみても、やはり同じエラーが返されてしまいました。
otn

2015/09/10 01:31

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

2015/09/10 02:15

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

2015/09/10 04:50

すみません、ローカルだと、otn様が仰っていたように、/(スラッシュ)無しの「www」で接続できました。 ただ、本番環境のエックスサーバーでは、やはり「www」だと接続出来ないみたいです。ローカルと本番環境でごっちゃになっていて、ローカルでスラッシュ無しを試していたつもりでいました。大変申し訳ないです。 本番環境のエックスサーバーでは、wwwで接続できないのは、サーバーの設定なのか、PHPのバージョンなのか・・・。一応PHPのバージョンをエックスサーバーで一番高い5.5.19にしてみたのですが、やはり無理なようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問