女子の「頭皮」のお悩み解決の選択肢とは?

はじめましてphp初心者です。

以下の内容を実行した際に
うまく行かず困っています。


$ftp_server="【サーバー名】";
$ftp_user_name="【アカウント名】";
$ftp_user_pass="【パスワード】";

//サーバーに接続する
$conn_id = ftp_connect($ftp_server);

// ユーザ名とパスワードでログインする
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// 接続できたか確認する
if ((!$conn_id) || (!$login_result)) {
echo "FTP接続に失敗しました。";
exit;
} else {
echo "FTP接続に成功しました。";
}

$local_file="【ローカルのファイルパス】";
$remote_file="【FTPサーバー上のアップロードファイルパス】";

if (!ftp_put($conn_id, $remote_file, $local_file, FTP_ASCII)) {
echo "FTPアップロードに失敗しました。";
exit;
} else {
echo "FTPアップロードに成功しました。";
}

ftp_close($conn_id);

ローカル、リモート共にファイルの位置は間違っていません。

また以上のように反映させた際に返ってくる答えは

「FTP接続に成功しました。」

「FTPアップロードに成功しました。」

と出てきます。


しかし、ffftpを確認したところ

サバー側に変化がありません。

手動ではffftpでアップ可能です。


ご教授お願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

エラーが表示されないことを鑑みると、


意図とは異なるディレクトリにPUTされている可能性が高いです。
$remote_file が絶対パス指定されているかどうか、
そのあたりに問題がありそうです。

考えられる可能性を列挙するとこんな感じでしょうか。

(1)ファイルパスの指定が間違っている。
・違うディレクトリにPUTされていないか。
・Windows環境、Unix/Linux環境のパス表現の違い。
・「/」で区切っているか。
・「\」で区切る場合、「\\」と指定しているか。

(2)PASVモードにする必要がある環境。
ftp_login()の後、ftp_put()の前に以下を実行してみる。
if( ! ftp_pasv( $ftp, true ) ){ exit( 'ftp_pasv(): failed.' ); }

(3)ftp_put()でフルパス指定ができない環境。
ディレクトリ移動と PUT を分離してみる。
ftp_chdir( $ftp_conn, '/path/to/somewhere/' );
ftp_put( $ftp_conn, 'file.txt', 'c:/local/path/file.html', FTP_ASCII );

(4)ftp_put()がレンタルサーバで禁止されている。
    • good
    • 0

念のため確認ですが



>しかし、ffftpを確認したところ
>サバー側に変化がありません。

ffftpは「最新の状態に更新」されていますよね(キャッシュを保持しているハズなので・・・)。
    • good
    • 0
この回答へのお礼

はい、更新しましたが変化なしです。

直接ページに行っても変化ありません。

お礼日時:2012/01/12 23:43

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphpでファイルをアップロードできるか?

phpでのファイルアップロードについて質問します。
再質問となりますが、実際にコードを作成してやってみてうまくいかないので、
あらためて質問させていただきました。

eラーニング教材(htmlで作成)で、動画ファイルをストリーミングさせることになりました。
ウェブサーバ側へのアップロードする画面として、move_uploaded_file()やis_uploaded_file()メソッドをつかっていましたが、ストリーミングサーバ側としてFTP通信でポート20、21からのみのアップロードのみ許可されているとのことです。

ftp_put()メソッドを使ってアップロードさせたところうまくいきません。

**************<コード>*************
$ftp_server="【サーバー名】";
$ftp_user_name="【アカウント名】";
$ftp_user_pass="【パスワード】";
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if ((!$conn_id) || (!$login_result)) {
echo "FTP接続に失敗しました。";
exit;
} else {
echo "FTP接続に成功しました。";
}


ここまででFTPの接続はできているようです。
その直後に、


$local_file="【ローカルのファイルパス】";
$remote_file="【FTPサーバー上のアップロードファイルパス】";

if (!ftp_put($conn_id, $remote_file, $local_file, FTP_BINARY)) {
echo "FTPアップロードに失敗しました。";
exit;
} else {
echo "FTPアップロードに成功しました。";
}
**************<コード>*************


FTPアップロードに失敗します。
原因がわからなく、こまっています。

ポートの指定が必要なのでしょうか?
おしえてください。
よろしくおねがいたします。

****************
FTP supportはenabled になっています。
phpのバージョンは4または5です。
IE7以上のブラウザ環境を想定しています。

phpでのファイルアップロードについて質問します。
再質問となりますが、実際にコードを作成してやってみてうまくいかないので、
あらためて質問させていただきました。

eラーニング教材(htmlで作成)で、動画ファイルをストリーミングさせることになりました。
ウェブサーバ側へのアップロードする画面として、move_uploaded_file()やis_uploaded_file()メソッドをつかっていましたが、ストリーミングサーバ側としてFTP通信でポート20、21からのみのアップロードのみ許可されているとのことです。

ftp_put()メ...続きを読む

Aベストアンサー

PHPは、ローカルPCで実行されているのではなく、Webサーバーで実行されているのですから、ftp_putの引数に、ローカルPCでのファイルパスを指定すること自体が間違えています。
(PHPでftp_putするということは、そのPHPが稼動しているWebサーバー内に存在するファイルを、別のftpサーバーに転送させることであって、PHPにアクセスしたブラウザ間とでftp通信できるすることではありません)
#そんなことできたら、危なくてしょうがないですもんね。

ローカルPCのブラウザから<input type="file" name="img">で送信されたファイルが
Webサーバー上では、$_FILES['img']['tmp_name']に存在するのですから、それを
別のftpサーバーにputするなら、指定するファイルは$_FILES['img']['tmp_name']
になります。

なお、アップロード完了後に一旦確認画面を出してからftp_put()するなど、2パスにしているなら
$_FILES['img']['tmp_name']は1パス目の最後で消えてしまうので、move_uploaded_file()でも使って、
専用のディレクトリに移動させてから、そのmoveしたファイルをftp_put()することになります。


> この環境で動かしてから、実際のストリーミングで利用するサーバでためしてみようと考えております。

実際のストリーミングで利用するサーバが ブラウザからファイルのアップロードができないタイプのサーバーなので、一旦別のWebサーバにアップロードして、そこからftp_putを使うということなら、
<input type="file">を受けるこのPHPをそのまま、実際のストリーミングで利用するサーバーにもっていっても動きません。(アップロードできないのですから)
なので、この場合、テスト中だけでなく、本番でも アップロードできるWebサーバーを別に立ててある必要があります。

逆に、実際のストリーミングで利用するサーバーでもこのPHPが動くのなら、
わざわざ、ftp_putしなくても、$_FILES['img']['tmp_name']をmove_uploaded_file()
するだけで、完了です。


> FTP通信でポート20、21からのみのアップロードのみ許可されているとのことです。

まず、そのサーバーで、ftpの話じゃなくて、
httpで、ファイルのアップロードが許可されているどうかを確認するのが、最初かと。

PHPは、ローカルPCで実行されているのではなく、Webサーバーで実行されているのですから、ftp_putの引数に、ローカルPCでのファイルパスを指定すること自体が間違えています。
(PHPでftp_putするということは、そのPHPが稼動しているWebサーバー内に存在するファイルを、別のftpサーバーに転送させることであって、PHPにアクセスしたブラウザ間とでftp通信できるすることではありません)
#そんなことできたら、危なくてしょうがないですもんね。

ローカルPCのブラウザから<input type="file" name="img">...続きを読む

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1


人気Q&Aランキング