Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 移动后重命名文件_Php_File_Cmd_Move - Fatal编程技术网

Php 移动后重命名文件

Php 移动后重命名文件,php,file,cmd,move,Php,File,Cmd,Move,我试图重命名一个文件,同时使用.cmd文件和.php文件将其移动到“旧”文件夹中。此文件将以批处理作业的形式通过电子邮件发送,然后在报告末尾移动到上个月和当前年份的旧文件夹中。现在:文件已正确通过电子邮件发送,并已移动到旧文件夹中,但文件名在进入“旧”文件夹时未被重命名。有人能对我的代码提出建议吗?我似乎找不出错误在哪里。谢谢 .CMD文件的我的代码: REM Email the 2 monthly stats files regarding gtwinapps REM The report i

我试图重命名一个文件,同时使用.cmd文件和.php文件将其移动到“旧”文件夹中。此文件将以批处理作业的形式通过电子邮件发送,然后在报告末尾移动到上个月和当前年份的旧文件夹中。现在:文件已正确通过电子邮件发送,并已移动到旧文件夹中,但文件名在进入“旧”文件夹时未被重命名。有人能对我的代码提出建议吗?我似乎找不出错误在哪里。谢谢

.CMD文件的我的代码:

REM Email the 2 monthly stats files regarding gtwinapps
REM The report is sent at 9:20 AM every first monday of every month
REM in C:\Smurf_Reports\gtwinapps\Monthly_Stats
"c:\Program Files\xampp\php\php.exe" d:\batch\monthly_smurfreport_gtwinapps.php
move C:\Smurf_Reports\gtwinapps\Monthly_Stats\gtwinapps_statsmonthly.csv C:\Smurf_Reports\gtwinapps\Monthly_Stats\old
.PHP文件的我的代码:
  /*This application pickups up *.csv files from Monthly_Stats folder and then sends     email to ops Support at ops.support@scotiabank.com.
  The command file associated with this php file moves the .csv file into the "OLD"   folder in the same directory

  */

  $dirpath = "C:/Smurf_Reports/gtwinapps/Monthly_Stats/";

  /* Renaming the batch job file to display the previous month and year once it is moved    into the "OLD" folder for clarity purposes */
  rename  ("C:\Smurf_Reports\gtwinsapps\Monthly_Stats\gtwinapps_statsmonthly.csv", "C:\Smurf_Reports\      gtwinapps\Monthly_Stats\old\monthly_gtwinapps_" . date("F_Y", strtotime("-1  month")) . ".csv");
  rename  ("C:\Smurf_Reports\gtwinsapps\Monthly_Stats\monthly.csv", "C:\Smurf_Reports\gtwinapps\Month      ly_Stats\old\gtwinapps_statsmonthly_" . date("F_Y", strtotime("-1 month")) . ".csv");

  if ($handle = opendir($dirpath  )) 
  {

$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";


$headers .= "\nMIME-Version: 1.0\n" .
        "Content-Type: multipart/mixed;\n" .
        " boundary=\"{$mime_boundary}\"";



$email_message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 8bit\n\n" .
$message_text . "\n\n";
$email_message .= "--{$mime_boundary}\n";

    /* This is the correct way to loop over the directory. */
    while (false !== ($entry = readdir($handle)))

{
    if (strpos($entry, '.csv',1))
    {
            $filepath = "";
        $filesize = 0;

        $filepath = $dirpath."".$entry; 
        $filesize = filesize ($filepath);          


        if (file_exists($filepath) && $filesize > 1)
        {
            $fileatt = $filepath;
            $fileatt_name = $entry;

            $fileatt_type = "application/octet-stream";

            $message_text .= "<P>Hi</P>";


            $file = fopen($fileatt,'rb');
            $data = fread($file,filesize($fileatt));
            fclose($file);

            $data = chunk_split(base64_encode($data));

                    $email_message .=  "Content-Type: {$fileatt_type};\n" .
                    " name=\"{$fileatt_name}\"\n" .
                    "Content-Disposition: attachment;\n" .
                    //" filename=\"{$fileatt_name}\"\n" .
                    "Content-Transfer-Encoding: base64\n\n" .
                    $data . "\n\n";
                    $email_message .= "--{$mime_boundary}\n";


        }
        $email_from = "ops.support@yahoo.com";
    //          $email_to = "ops.support@yahoo.com";
        $email_to   = "k.j@yahoo.com,g.h@yahoo.com";

        $lastMonth = date('F-Y',strtotime('last month'));
        $email_subject = "($lastMonth) Monthly Smurf Report for  GTWINAPPS.";

        $headers .= "From: ".$email_from."\r\n";


        echo $filepath."</br>";
    }

}

    closedir($handle);
    $ok = @mail($email_to, $email_subject, $email_message, $headers);
       }
/*此应用程序从每月统计文件夹中提取*.csv文件,然后向ops的ops支持部门发送电子邮件。support@scotiabank.com.
与此php文件关联的命令文件将.csv文件移动到同一目录中的“OLD”文件夹中
*/
$dirpath=“C:/Smurf_Reports/gtwinapps/Monthly_Stats/”;
/*为清晰起见,将批处理作业文件移至“旧”文件夹后,重命名批处理作业文件以显示上一个月和上一年*/
重命名(“C:\Smurf_Reports\gtwinsapps\Monthly_Stats\gtwinapps_statsmonthly.csv”,“C:\Smurf_Reports\gtwinapps\Monthly_Stats\old\Monthly_gtwinapps.date”(“F_Y”,strotime(“-1个月”))。.csv”);
重命名(“C:\Smurf_Reports\gtwinsapps\Monthly_Stats\Monthly.csv”,“C:\Smurf_Reports\gtwinapps\Month ly_Stats\old\gtwinapps\u statsmonthly.csv”)。日期(“F_Y”,strotime(“-1个月”)。.csv”);
如果($handle=opendir($dirpath))
{
$semi_rand=md5(time());
$mime_boundary=“==Multipart_boundary_x{$semi_rand}x”;
$headers.=“\n时间版本:1.0\n”。
“内容类型:多部分/混合;\n”。
“边界=\”{$mime\u boundary}\”;
$email\u message=“这是MIME格式的多部分邮件。\n\n”。
“{$mime\U边界}\n”。
“内容类型:text/html;字符集=\”iso-8859-1\“\n”。
“内容传输编码:8位\n\n”。
$message\u text.“\n\n”;
$email\u message.=“{$mime\u boundary}\n”;
/*这是在目录上循环的正确方法*/
while(false!==($entry=readdir($handle)))
{
if(STRPO($entry,.csv',1))
{
$filepath=“”;
$filesize=0;
$filepath=$dirpath.“.”$entry;
$filesize=filesize($filepath);
如果(文件存在($filepath)&&$filesize>1)
{
$fileatt=$filepath;
$fileatt_name=$entry;
$fileatt_type=“应用程序/八位字节流”;
$message_text.=“

Hi

”; $file=fopen($fileatt,'rb'); $data=fread($file,filesize($fileatt)); fclose($文件); $data=chunk_split(base64_encode($data)); $email_message.=“内容类型:{$fileatt_Type};\n”。 “name=\”{$fileatt\u name}\“\n”。 “内容处置:附件;\n”。 //“filename=\”{$fileatt\u name}\“\n”。 “内容传输编码:base64\n\n”。 $data。“\n\n”; $email\u message.=“{$mime\u boundary}\n”; } $email\u from=“ops。support@yahoo.com"; //$email_to=“ops。support@yahoo.com"; $email\u to=“k。j@yahoo.comGh@yahoo.com"; $lastMonth=日期('F-Y',标准时间('lastMonth'); $email_subject=“($lastmount)GTWINAPPS的Smurf月度报告。”; $headers.=“发件人:”.$email\u From.\r\n”; echo$filepath。“
”; } } closedir($handle); $ok=@mail($email\u to、$email\u subject、$email\u message、$headers); }
在您的
重命名
函数中,您需要(A)避开反斜杠(
\\
),或者(B)使用前斜杠作为目录分隔符

查找删除失败的原因如果您在查找错误时遇到困难,因为这是批处理作业的一部分,您可以使用php的mail函数设置伪“断点”在脚本中,类似于
mail('me@me.com“,”第2行的电子邮件“,”发到第2行“在整个代码中设置这些选项,以确定失败的位置。如果你没有收到电子邮件,它很可能在那行之前的某个地方失败。删除什么?没有删除发生您的代码在重命名函数字符串中真的有这样的间隙吗<代码>\Month ly_Stats
,这可能是导致问题的原因。这发生在我键入问题和堆栈溢出代码时。我试图将代码隔开,使其显示在单独的段中。抱歉搞砸了就这样?如果我在文件名周围使用单引号,它会解决我的问题吗?我现在就要试一下。等等,我想用单引号替换所有的双引号吗?您是否可以向我展示两个重命名函数的外观?将文件路径周围的所有双引号替换为单引号。重命名('C:\Smurf_Reports\gtwinsapps\Monthly_Stats\gtwinapps_statsmonthly.csv','C:\Smurf_Reports\gtwinapps\Monthly_Stats\old\Monthly__winapps_.date(“F_Y”,strottime(-1个月))。.csv”);重命名('C:\Smurf_Reports\gtwinsapps\Monthly_Stats\Monthly.csv','C:\Smurf_Reports\gtwinapps\Month ly_Stats\old\gtwinapps_statsmonthly.date(“F_Y”,strottime(-1个月))。.csv”);我只是试着运行相同的错误正在发生,文件名仍然没有被更改。