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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PHP

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

Q&A

解決済

1回答

4051閲覧

PHPのrenameでエラーが出ます

sake

総合スコア57

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PHP

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

0グッド

1クリップ

投稿2021/11/04 17:08

PHPでファイルを移動させるプログラム書きました。
しかし、エラーが出てファイルの移動ができません。

PHP

1<?php 2//ファイルを移動させたいディレクトリの指定 3$move_directory = "/home/samba/ddd/"; 4//ディレクトリのハンドルをオープンできれば処理を実行 5if ($handle = opendir("/home/samba/AAA/")) { 6 //オープンしたディレクトリにファイルが存在すればループで取り出していく 7 while(false !== ($entry = readdir($handle))) { 8 //ファイル名が「.」「..」じゃなければ処理を実行 9 if ($entry != "." && $entry != "..") { 10 //ファイルを指定したディレクトリに移動させる 11 rename($entry, $move_directory . $entry); 12 } 13 } 14 //オープンしたディレクトリのハンドルをクローズする 15 closedir($handle); 16} 17?>

エラー内容
PHP Warning: rename(0000001X626180X64695): failed to open stream: No such file or directory in /usr/local/bin/mail_move.php on line 11
PHP Warning: rename(0000001X626180X64695,/home/samba/ddd/0000001X626180X64695): No such file or directory in /usr/local/bin/mail_move.php on line 11
PHP Warning: rename(0000001X646180X64695): failed to open stream: No such file or directory in /usr/local/bin/mail_move.php on line 11

ただし、以下の書き方だと問題なく出来ます。

PHP

1<?php 2if (rename("/home/samba/AAA/0000001X626180X64695", "/home/samba/ddd/0000001X626180X64695")) { 3 echo "ファイルの移動に成功しました"; 4} else { 5 echo "ファイルの移動に失敗しました"; 6} 7?>

変数の使い方に問題があるのでしょうか?
どなたか、お力添えよろしくお願いします。
環境:
CENTOS7
PHPのバージョンは「PHP 7.3.18」

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーにある通り、rename()の引数に投入されたのはreaddir()が返す「名称」であって、フルパスではないからです。
自身でもコメントで「ファイル名が「.」「..」じゃなければ処理を実行」と書かれています。
「想定通り動く」ほうはフルパスが入れられています。

投稿2021/11/04 21:03

編集2021/11/04 21:07
m.ts10806

総合スコア80875

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

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

sake

2021/11/05 04:42

ありがとうございました。 //変数にファイルが保存されているディレクトリの指定 $moto_directory = "/home/samba/AAA/"; //renameを下記のようにかきかえました。 rename($moto_directory . $entry, $move_directory . $entry);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問