PHP: использование переменной внутри двойных кавычек с обратными чертами - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть переменная с путем Windows и обратными слешами.И в этом мне нужны две другие переменные.Выглядит так:

$file_name_with_full_path = 'C:\inetpub\wwwroot\upload\files\$filnr\$file';

В конце мне нужны переменные $ filnr и $ file, но это невозможно сделать с помощью ""

$file_name_with_full_path = "C:\inetpub\wwwroot\upload\files\$filnr\$file";

С "" iЯ получил ошибку, потому что в моем скрипте я делаю curl-запрос.

Как мне вставить переменные с обратной косой чертой в один '?

мой полный скрипт выглядит так:

    if ($result->num_rows > 0) {

    //schleife ausführen
    while($row = $result->fetch_assoc()) {

        //ip und filnr aus datenbank in var
        $ip = $row["ip"];
        $filnr = $row["filnr"];

        echo "$filnr $ip<br>";

        //filnr und dateiname momentan noch hart codiert
        $target_url = "http://10.74.20.94:6001/upload";
        $file_name_with_full_path = 'C:\inetpub\wwwroot\upload\files\$filnr\$file';

        if (function_exists('curl_file_create')) {
            $cFile = curl_file_create($file_name_with_full_path);
          } else {
            $cFile = '@' . realpath($file_name_with_full_path);
          }

        $post = array('targetpath'=>'C:\bizstorecard\hossi','uploadfile'=> $cFile);

        $go = curl($target_url,$post);

    }
} else {
    echo "Fehler bei Abfrage";
}

function curl($target_url,$post) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$target_url);
        curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        curl_exec($ch);
        curl_close($ch);
}

Ответы [ 3 ]

1 голос
/ 24 сентября 2019

Вы не можете использовать переменные непосредственно в одной строке в кавычках, если вы хотите использовать это, вам нужно либо объединить вручную, либо использовать sprintf.

Причина двойных кавычекне работает, потому что обратная косая черта экранирует символ $, и поэтому она просто печатает строку буквально.Вам нужно экранировать символы обратной косой черты, чтобы правильно их печатать.

$file_name_with_full_path = "C:\\inetpub\\wwwroot\\upload\\files\\$filnr\\$file";
1 голос
/ 24 сентября 2019

Просто используйте вместо этого конкатенацию строк:

$file_name_with_full_path = 'C:\inetpub\wwwroot\upload\files\\' . $filnr . '\\' . $file;

Обратите внимание, что вам нужно использовать \\ для \ перед ', иначе PHP обрабатывает его как экранированный '.

Если вы хотите использовать двойные кавычки, вам просто нужно убрать все обратные слеши, которые происходят перед чем-то, что может быть интерпретировано как переменная (или специальный символ, например \f = Formfeed):

$file_name_with_full_path = "C:\inetpub\wwwroot\upload\\files\\$filnr\\$file";

Демонстрация на 3v4l.org

0 голосов
/ 26 сентября 2019

В качестве альтернативы и с добавленной удобочитаемостью вы можете использовать фигурные скобки внутри строк в двойных кавычках.

$path = "C:\inetpub\wwwroot\upload\files\{$filnr}\{$file}";

Кроме того, это работает со значениями массива, адресованными одинарными кавычками:

$path = "C:\inetpub\wwwroot\upload\files\{$file['directory']}\{$file['name']}";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...