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。您需要指定完整路径,并且仅指定文件名。在使用echo之前先尝试$nameconst SAVE_PATH = "/var/www/osbs/";,您会发现它不是路径,而只是文件名。

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

<?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;
}
 ?>

我改变了什么:
  • 定义了一个file_put_contents
  • 在各处使用新常量。有时不再是相对的,有时不再是绝对的,这都是绝对的。
  • RecordingUrl中使用了常数(,这是实际的解决方法,您需要在此处使用完整路径)
  • 添加了额外的检查以确保已设置ojit_code,否则在未设置时会收到PHP警告。
  • 10-08 06:23