php - file_exists()在while循环内的php5中不起作用

标签 php if-statement while-loop get

file_exists 不工作。我看过几个例子,但还是不行。程序未检测到该文件。我的文件路径是/var/www/osbs/PHPAPI/recording.mp3,网站根目录在osbs里面。这个文件的位置在 PHPAPI 中,这就是为什么我不把完整路径放在 file_put_contents 中的原因。该程序能够制作原始 recording.mp3 但不能制作任何附加版本。

<?php
$actual_name = pathinfo("PHPAPI/recording.mp3",PATHINFO_FILENAME);
$original_name = $actual_name;
$extension = pathinfo("PHPAPI/recording.mp3",PATHINFO_EXTENSION);

if ($_GET["RecordingUrl"]) {
     if (file_exists("/var/www/osbs/PHPAPI/".$actual_name.".".$extension)) {
        $actual_name = find_new_name($original_name, $extension);
     }
     else {
        $actual_name = $original_name;
     }
     $name = $actual_name.".".$extension;
     file_put_contents($name, file_get_contents($_GET["RecordingUrl"]));
}

function find_new_name ( $file, $extension ) {
    $name = $file.".".$extension;
    $i = 0;
    while(file_exists("/var/www/osbs/PHPAPI/".$name)){
        $new_name = $file.$i;
        $name = $new_name.".".$extension;
        $i++;
    }
    return $new_name;
}
 ?>

最佳答案

您的问题与 file_put_contents 有关。您需要指定一个完整路径,而您只指定一个文件名。在使用它之前尝试 echoing $name,您会发现它不是路径,只是一个文件名。

我建议你在文件的开头设置一个常量,而不是有时依赖相对路径,有时依赖绝对路径。

<?php
const SAVE_PATH = "/var/www/osbs/";

$actual_name = pathinfo(SAVE_PATH."PHPAPI/recording.mp3",PATHINFO_FILENAME);
$original_name = $actual_name;
$extension = pathinfo(SAVE_PATH."PHPAPI/recording.mp3",PATHINFO_EXTENSION);

if (isset($_GET["RecordingUrl"]) && $_GET["RecordingUrl"]) {
     if (file_exists(SAVE_PATH."PHPAPI/".$actual_name.".".$extension)) {
        $actual_name = find_new_name($original_name, $extension);
     }
     else {
        $actual_name = $original_name;
     }
     $name = $actual_name.".".$extension;

     file_put_contents(SAVE_PATH.'PHPAPI/'.$name, file_get_contents($_GET["RecordingUrl"]));
}

function find_new_name ( $file, $extension ) {
    $name = $file.".".$extension;
    $i = 0;
    while(file_exists(SAVE_PATH."PHPAPI/".$name)){
        $new_name = $file.$i;
        $name = $new_name.".".$extension;
        $i++;
    }
    return $new_name;
}
 ?>

我改变了什么:

  1. 定义了一个const SAVE_PATH = "/var/www/osbs/";
  2. 到处使用新常量。不再有时是相对的,有时是绝对的,一切都是绝对的。
  3. 使用 file_put_contents 中的常量(这是实际修复,您需要此处的完整路径)
  4. 添加了额外的检查以确保 RecordingUrl 已设置,否则在未设置时您会收到 PHP 警告。

关于php - file_exists()在while循环内的php5中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424798/

相关文章:

php - 显示函数返回的 mySQL 结果数组中的数据

php - 好的基于 php 的工具包或用于 paypal 订阅管理的后端软件?

batch-file - 如何在批处理文件中使用 if - else 结构?

c++ - `while (i != 0 && (a[i].p != 0 || a[i].q != 0));` 除了卡住还能做什么?

php - Wamp 中的 "Call to undefined function sqlsrv_connect()",已安装驱动程序

php - 拦截对定义的 PHP 方法的调用

mysql - 新手 : unix bash, 嵌套 if 语句,循环结果来自 sql

php - 为什么这个简单的 PHP if 语句不起作用,我该如何更正它?

c - 优化 C 中的 while 循环?

java - while循环初始化但不循环java