Что такое код tempnam

Эквивалент tempnam в С++

Мне нужно создать случайные имена, которые я буду использовать для создания временных файлов в каталоге. В настоящее время я использую для этого функцию C tempnam(). Мой код находится на С++ и хотел бы использовать эквивалент С++ для выполнения той же задачи. Код должен работать как на Solaris, так и на Windows.

Кто-нибудь знает о такой вещи на С++? Любой указатель на это будет высоко оценен.

Попробуйте std::tempnam в заголовке cstdio .;)

Стандартная библиотека C по-прежнему доступна в коде С++. Для удобства они предоставляют С++-оболочки (в заголовках с префиксом «c» и без расширения) и доступны в пространстве имен std.

Вы также можете использовать обычную версию C (stdio.h и tempnam в глобальном пространстве имен, но вы спросили версию на С++;))

Стандартная библиотека С++ предоставляет только новые функции, когда есть возможность для улучшения. Он имеет строковый класс, потому что класс строк является улучшенным по сравнению с char указателями, поскольку C имеет. Он имеет векторный класс, потому что, ну, он полезен.

Для чего-то вроде tempnam , что С++ мог бы вывести на вечеринку, чего у нас еще не было с C? Поэтому они ничего не сделали с этим, кроме как сделать старую версию доступной.

Я знаю, что это не отвечает на ваш вопрос, а как побочная заметка, согласно странице руководства:

Хотя tempnam (3) генерирует имена которые трудно угадать, это тем не менее, возможно, что время, когда tempnam (3) возвращает pathname и время, в течение которого программа открывает его, другая программа может создать это имя пути, используя открыть (2) или создать его как символическое ссылка. Это может привести к безопасности отверстия. Чтобы избежать таких возможностей, используйте открытый (2) флаг O_EXCL для открытия путь. Или еще лучше, используйте mkstemp (3) или tmpfile (3).

Что такое код tempnam

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

tempnam(): _BSD_SOURCE || _SVID_SOURCE

ОПИСАНИЕ

Функция tempnam() возвращает указатель на строку, которая является допустимым именем файла и при этом файл с подобным именем на момент проверки tempnam() не существует. Суффикс сгенерированного имени файла будет начинаться с pfx (при условии, что pfx — не NULL-строка и содержит не менее пяти байт). Также необходимо, чтобы префикс, состоящий из имён каталогов полного имени файла, был «целесообразным» (чаще всего это подразумевает, как минимум, доступность на запись).

Попытка найти подходящий каталог делится на следующие шаги:

1. Если существует переменная окружения TMPDIR, которая содержит подходящий каталог, то используется она. 2. Иначе, если аргумент dir не является NULL и подходящий, то используется он. 3. Иначе используется P_tmpdir (описана в ), если она подходит. 4. И, наконец, может быть использован каталог, определённый реализацией функции.

Память под строку, возвращаемую tempnam(), выделяется с помощью malloc(3) и в последствии должна быть освобождена с помощью free(3).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

ОШИБКИ

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
tempnam() безвредность в нитях безвредно (MT-Safe env)

СООТВЕТСТВИЕ СТАНДАРТАМ

ЗАМЕЧАНИЯ

В SUSv2 не упоминается использование TMPDIR; в glibc она будет использоваться только в том случае, если у программы не установлен бит set-user-ID. В SVr4, используемый каталог для случая 4./tmp (как и для glibc).

Так как tempnam() динамически выделяет память под возвращаемое имя файла, то она является реентерабельной и, следовательно, безопасной при использовании нитей (в отличие от tmpnam(3)).

Функция tempnam() генерирует уникальное имя каждый раз, пока не достигнет предела TMP_MAX (определённого в ). Если она будет вызвана более чем TMP_MAX раз, то дальнейшее поведение определяется конкретной реализацией.

tempnam() использует по крайней мере первые пять байт из pfx.

Реализация tempnam() из glibc завершится с ошибкой EEXIST, если не сможет найти уникальное имя.

Описание функций языка Си

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

tmpnam – генерация уникального имени для временного файла.

#include
char * tmpnam (char *tmp_name);

tmp_name – указатель на строку, в которую будет помещено уникальное маршрутное имя файла.

Если удалось сгенерировать уникальное имя файла, то будет возвращен указатель на строку, в которую помещено уникальное имя файла.
Если сгенерировать уникальное имя не удалось, то будет возвращен NULL.

Функция tmpnam генерирует уникально маршрутное имя для временного файла. Сгенерированное имя помещается в строку на которую указывает аргумент tmp_name.

Внимание! Массив, на который указывает аргумент tmp_name, должен быть размером не меньше, чем указано константе L_tmpnam (обычно L_tmpnam=20).

Если в качестве аргумента функции указать NULL, то уникальное имя будет сохранено во внутреннем буфере функции и будет переписано при следующем вызове функции tmpnam.

Вызывать функцию tmpnam можно несколько раз, но не более чем TMP_MAX (обычно TMP_MAX = 238328) раз. Каждый раз будет сгенерировано уникальное маршрутное имя файла.

Функция tmpnam только генерирует имя файла, она не создает сам файл.

Не рекомендуется использовать функцию tmpnam, так как в ней не проверяется размер буфера, в который будет помещено сгенерированное имя, и возможно возвращения вместо имени NULL. Лучше используйте для создания временного файла с уникальным именем функцию mkstemp.

В примере генерируется случайное маршрутное имя временного файла, и результат выводится на консоль.

Уникальное имя: /tmp/file0AwioQ

tmpnam
tmpnam_r
mkstemp
mktemp
tempnam
tmpfile

_tempnam, _wtempnam, tmpnam, _wtmpnam _tempnam, _wtempnam, tmpnam, _wtmpnam

Формирует имена, которые можно использовать для создания временных файлов. Generate names you can use to create temporary files. Существуют более безопасные версии этих функций; см. статью tmpnam_s, _wtmpnam_s. More secure versions of some of these functions are available; see tmpnam_s, _wtmpnam_s.

Синтаксис Syntax

Параметры Parameters

prefix prefix
Строка, которая будет предваряться именами, возвращаемыми функцией _tempnam. The string that will be pre-pended to names returned by _tempnam.

команды dir
Путь, используемый в имени файла, если переменная среды TMP отсутствует или TMP не является допустимым каталогом. The path used in the file name if there is no TMP environment variable, or if TMP is not a valid directory.

str str
Указатель, который будет содержать формируемое имя и совпадать с именем, возвращенным функцией. Pointer that will hold the generated name and will be identical to the name returned by the function. Это удобный способ сохранения формируемого имени. This is a convenient way to save the generated name.

Возвращаемое значение Return Value

Каждая из этих функций возвращает указатель на созданное имя или значение NULL в случае сбоя. Each of these functions returns a pointer to the name generated or NULL if there is a failure. Сбой может произойти при попытке более TMP_MAX (см. stdio). H) вызывает метод с tmpnam или, если используется _tempnam , а в переменной среды TMP и в параметре dir указано недопустимое имя каталога. Failure can occur if you attempt more than TMP_MAX (see STDIO.H) calls with tmpnam or if you use _tempnam and there is an invalid directory name specified in the TMP environment variable and in the dir parameter.

Указатели, возвращаемые tmpnam и _wtmpnam , указывают на внутренние статические буферы. The pointers returned by tmpnam and _wtmpnam point to internal static buffers. Для освобождения этих указателей не следует вызывать функцию free. free should not be called to deallocate those pointers. для указателей, выделенных _tempnam и _wtempnam, необходимо вызывать Free . free needs to be called for pointers allocated by _tempnam and _wtempnam.

Илон Маск рекомендует:  Простая программа, использующая mdi интерфейс

Примечания Remarks

Каждая из этих функций возвращает имя файла, который в данный момент не существует. Each of these functions returns the name of a file that does not currently exist. tmpnam возвращает уникальное имя в указанном временном каталоге Windows, возвращенном жеттемппасв. tmpnam returns a name that’s unique in the designated Windows temporary directory returned by GetTempPathW. tempnam создает уникальное имя в каталоге, отличном от назначенного. _ _tempnam generates a unique name in a directory other than the designated one. Заметьте, что если в начало имени файла добавляется обратная косая черта без сведений о пути, например \fname21, это означает, что имя является допустимым для текущей рабочей папки. Note than when a file name is pre-pended with a backslash and no path information, such as \fname21, this indicates that the name is valid for the current working directory.

Для tmpnamможно сохранить созданное имя файла в str. For tmpnam, you can store this generated file name in str. Если str имеет значение NULL, tmpnam оставляет результат во внутреннем статическом буфере. If str is NULL, then tmpnam leaves the result in an internal static buffer. Поэтому все последующие вызовы уничтожают это значение. Thus any subsequent calls destroy this value. Имя, созданное tmpnam , состоит из генерируемого программой имени файла и, после первого вызова tmpnam, расширения файла последовательных чисел в Base 32 (. 1 –. vvu, когда TMP_MAX в stdio. H — 32 767). The name generated by tmpnam consists of a program-generated file name and, after the first call to tmpnam, a file extension of sequential numbers in base 32 (.1-.vvu, when TMP_MAX in STDIO.H is 32,767).

_tempnam создаст уникальное имя файла для каталога, выбранного следующими правилами. _tempnam will generate a unique file name for a directory chosen by the following rules:

Если переменная среды TMP определена и в ней задано допустимое имя каталога, уникальные имена файлов формируются для указанного каталога TMP. If the TMP environment variable is defined and set to a valid directory name, unique file names will be generated for the directory specified by TMP.

Если переменная среды TMP не определена или для нее задано имя несуществующего каталога, _tempnam будет использовать параметр dir в качестве пути, для которого он будет формировать уникальные имена. If the TMP environment variable is not defined or if it is set to the name of a directory that does not exist, _tempnam will use the dir parameter as the path for which it will generate unique names.

Если переменная среды TMP не определена или для нее задано имя несуществующего каталога, а если параметр dir имеет значение NULL или имя каталога, который не существует, _tempnam будет использовать текущий рабочий каталог для ген Оцените уникальные имена. If the TMP environment variable is not defined or if it is set to the name of a directory that does not exist, and if dir is either NULL or set to the name of a directory that does not exist, _tempnam will use the current working directory to generate unique names. В настоящее время, если и TMP, и dir указывают имена несуществующих каталогов, вызов функции _tempnam завершится ошибкой. Currently, if both TMP and dir specify names of directories that do not exist, the _tempnam function call will fail.

Имя, возвращаемое функцией _tempnam , будет объединением префикса и порядкового номера, который будет сочетаться для создания уникального имени файла для указанного каталога. The name returned by _tempnam will be a concatenation of prefix and a sequential number, which will combine to create a unique file name for the specified directory. _tempnam создает имена файлов, которые не имеют расширения. _tempnam generates file names that have no extension. _tempnam использует malloc для выделения пространства имени файла; Программа отвечает за освобождение этого пространства, когда оно больше не требуется. _tempnam uses malloc to allocate space for the filename; the program is responsible for freeing this space when it is no longer needed.

_tempnam и tmpnam автоматически обрабатывали строковые аргументы многобайтовых символов соответствующим образом, распознающие последовательности многобайтовых символов в соответствии с кодовой страницей OEM, полученной от операционной системы. _tempnam and tmpnam automatically handle multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the OEM code page obtained from the operating system. _wtempnam — это версия _tempnamдля расширенных символов; аргументы и возвращаемое значение _wtempnam являются строками расширенных символов. _wtempnam is a wide-character version of _tempnam; the arguments and return value of _wtempnam are wide-character strings. поведение _wtempnam и _tempnam идентично, за исключением того, что _wtempnam не обрабатывает строки многобайтовых символов. _wtempnam and _tempnam behave identically except that _wtempnam does not handle multibyte-character strings. _wtmpnam — это версия tmpnamдля расширенных символов; аргумент и возвращаемое значение _wtmpnam являются строками расширенных символов. _wtmpnam is a wide-character version of tmpnam; the argument and return value of _wtmpnam are wide-character strings. поведение _wtmpnam и tmpnam идентично, за исключением того, что _wtmpnam не обрабатывает строки многобайтовых символов. _wtmpnam and tmpnam behave identically except that _wtmpnam does not handle multibyte-character strings.

Если определены _DEBUG и _CRTDBG_MAP_ALLOC , то _tempnam и _wtempnam заменяются вызовами _tempnam_dbg и _wtempnam_dbg. If _DEBUG and _CRTDBG_MAP_ALLOC are defined, _tempnam and _wtempnam are replaced by calls to _tempnam_dbg and _wtempnam_dbg.

Сопоставления подпрограмм обработки обычного текста Generic-Text Routine Mappings

Подпрограмма TCHAR.H TCHAR.H routine _UNICODE и _MBCS не определены _UNICODE & _MBCS not defined _MBCS определено _MBCS defined _UNICODE определено _UNICODE defined
_ttmpnam _ttmpnam tmpnam tmpnam tmpnam tmpnam _wtmpnam _wtmpnam
_ttempnam _ttempnam _tempnam _tempnam _tempnam _tempnam _wtempnam _wtempnam

Требования Requirements

Подпрограмма Routine Обязательный заголовок Required header
_tempnam _tempnam
_wtempnam, _wtmpnam _wtempnam, _wtmpnam или or
tmpnam tmpnam

Дополнительные сведения о совместимости см. в разделе Совместимость. For additional compatibility information, see Compatibility.

Эквивалент tempnam в С++

Мне нужно создать случайные имена, которые я буду использовать для создания временных файлов в каталоге. В настоящее время я использую для этого функцию C tempnam(). Мой код находится на С++ и хотел бы использовать эквивалент С++ для выполнения той же задачи. Код должен работать как на Solaris, так и на Windows.

Кто-нибудь знает о такой вещи на С++? Любой указатель на это будет высоко оценен.

Попробуйте std::tempnam в заголовке cstdio .;)

Стандартная библиотека C по-прежнему доступна в коде С++. Для удобства они предоставляют С++-оболочки (в заголовках с префиксом «c» и без расширения) и доступны в пространстве имен std.

Вы также можете использовать обычную версию C (stdio.h и tempnam в глобальном пространстве имен, но вы спросили версию на С++;))

Стандартная библиотека С++ предоставляет только новые функции, когда есть возможность для улучшения. Он имеет строковый класс, потому что класс строк является улучшенным по сравнению с char указателями, поскольку C имеет. Он имеет векторный класс, потому что, ну, он полезен.

Для чего-то вроде tempnam , что С++ мог бы вывести на вечеринку, чего у нас еще не было с C? Поэтому они ничего не сделали с этим, кроме как сделать старую версию доступной.

Я знаю, что это не отвечает на ваш вопрос, а как побочная заметка, согласно странице руководства:

Хотя tempnam (3) генерирует имена которые трудно угадать, это тем не менее, возможно, что время, когда tempnam (3) возвращает pathname и время, в течение которого программа открывает его, другая программа может создать это имя пути, используя открыть (2) или создать его как символическое ссылка. Это может привести к безопасности отверстия. Чтобы избежать таких возможностей, используйте открытый (2) флаг O_EXCL для открытия путь. Или еще лучше, используйте mkstemp (3) или tmpfile (3) .

tempnam

(PHP 4, PHP 5, PHP 7)

tempnam — Создаёт файл с уникальным именем

Описание

Создаёт файл с уникальным именем в определённой директории с правами 0600. Если эта директория не существует или недоступна для записи, tempnam() может создать файл во временной директории системы и вернуть полный путь к этому файлу, включая его имя.

Список параметров

Директория, где будет создан временный файл.

Префикс имени генерируемого файла.

Замечание: Windows использует только первые три символа из указанного префикса.

Возвращаемые значения

Возвращает имя нового временного файла (вместе с путем) или FALSE в случае неудачи.

Примеры

Пример #1 Пример использования функции tempnam()

= tempnam ( «/tmp» , «FOO» );

$handle = fopen ( $tmpfname , «w» );
fwrite ( $handle , «записываем в во временный файл» );
fclose ( $handle );

// здесь мы чего-нибудь делаем

Примечания

Замечание: Если PHP не может создать файл в указанной директории dir , он возвращается к директории по умолчанию вашей системы. На NTFS это также происходит в случае, если указанная директория dir содержит более 65534 файлов.

Смотрите также

  • tmpfile() — Создаёт временный файл
  • sys_get_temp_dir() — Возвращает путь к директории временных файлов
  • unlink() — Удаляет файл

User Contributed Notes 23 notes

Watch out using a blank $dir as a «trick» to create temporary files in the system temporary directory.

= tempnam ( » , ‘FOO’ ); // not good
?>

If an open_basedir restriction is in effect, the trick will not work. You will get a warning message like

Warning: tempnam() [function.tempnam]: open_basedir restriction in effect.
File() is not within the allowed path(s): (/var/www/vhosts/example.com/httpdocs:/tmp)

What works is this:

= tempnam ( sys_get_temp_dir (), ‘FOO’ ); // good
?>

Please note that this function might throw a notice in PHP 7.1.0 and above. This was a bugfix: https://bugs.php.net/bug.php? >
You can place an address operator (@) to sillence the notice:

if ( $tmp = @ tempnam () !== false ) <
// .
>

?>

Or you could try to set the «upload_tmp_dir» setting in your php.ini to the temporary folder path of your system. Not sure, if the last one prevents the notices.

Be careful with you forward and back slashes. Innocent looking code like this.

$uploaddir = «C:/Program Files/Apache Group/Apache2/htdocs/sasdap/uploads/»;
$tempFile = tempnam ($uploaddir, «TMPANAL»);
$fp = fopen($tmpfname, «w»);
fwrite($fp, $iqdata);
//fclose($fp);

. may show something odd when echoing $tempFile»;

i.e. /Program Files/Apache Group/Apache2/htdocs/sasdap/uploads/\TMP3D.tmp

Must. remember. to. use. backslashes.

tempnam() function does not support custom stream wrappers registered by stream_register_wrapper().

For example if you’ll try to use tempnam() on Windows platform, PHP will try to generate unique filename in %TMP% folder (usually: C:\WINDOWS\Temp) without any warning or notice.

?>

ouputs:
———————
PHP 5.2.13
node exists: 1
node is writable: 1
node is dir: 1
tempnam in dir: C:\Windows\Temp\tmp1D03.tmp

If you want to create temporary file, you have to create your own function (which will probably use opendir() and fopen($filename, «x») functions)

isn’t transferred:
( tempnam ( sys_get_temp_dir ())); // NULL
?>
also the warning will be generated:
Warning: tempnam() expects exactly 2 parameters, 1 given in php shell code .

Creating a temporary file with a specific extension is a common requirement on dynamic websites. Largely this need arises from Microsoft browsers that identify a downloaded file’s mimetype based on the file’s extension.

No single PHP function creates a temporary filename with a specific extension, and, as has been shown, there are race conditions involved unless you use the PHP atomic primitives.

I use only primitives below and exploit OS dependent behaviour to securely create a file with a specific postfix, prefix, and directory. Enjoy.

function secure_tmpname ( $postfix = ‘.tmp’ , $prefix = ‘tmp’ , $dir = null ) <
// validate arguments
if (! (isset( $postfix ) && is_string ( $postfix ))) <
return false ;
>
if (! (isset( $prefix ) && is_string ( $prefix ))) <
return false ;
>
if (! isset( $dir )) <
$dir = getcwd ();
>

// find a temporary name
$tries = 1 ;
do <
// get a known, unique temporary file name
$sysFileName = tempnam ( $dir , $prefix );
if ( $sysFileName === false ) <
return false ;
>

// tack on the extension
$newFileName = $sysFileName . $postfix ;
if ( $sysFileName == $newFileName ) <
return $sysFileName ;
>

// move or point the created temporary file to the new filename
// NOTE: these fail if the new file name exist
$newFileCreated = ( isWindows () ? @ rename ( $sysFileName , $newFileName ) : @ link ( $sysFileName , $newFileName ));
if ( $newFileCreated ) <
return $newFileName ;
>

unlink ( $sysFileName );
$tries ++;
> while ( $tries 5 );

return false ;
>
?>

The isWindows function is mostly left as an exercise for the reader. A starting point is below:

function isWindows () <
return ( DIRECTORY_SEPARATOR == ‘\\’ ? true : false );
>
?>

Like tempnam(), this function requires you to cleanup your own files later. Under UNIX (where you can rename onto an extant file and so I used link), you will have to remove both the link and the link’s target. Cleanup is left entirely to the reader.

I want to guarantee that the file will be created in the specified directory or else the function should return FALSE, I have a simple function that works, but I am unsure if its a potential security issue.

function dir_tempnam($dir, $prefix)
<
$real_dir_path = realpath($dir);
if (substr($real_dir_path, -1) != ‘/’)
$real_dir_path .= ‘/’;

$tempfile = tempnam($real_dir_path, $prefix);
$name = basename($tempfile);

if(is_file($real_dir_path.$name))
return $name;
else
<
@unlink($name);
return FALSE;
>
>

This function returns just the name of the temporary file in the specified directory, or FALSE.

Obviously it could return the entire $tempfile, but in my case, I actually want the basename value seperate.

Ошибка при использовании tempnam()

Использую ф-ию tempnam для создания файла в нужной мне директории. На локальном хостинге (читай Denwer) всё работает отлично, а на рабочем на этой ф-ии всё обрубается и появляется ошибка (варнинг):

Следующие далее ф-ии fopen и др. также не срабатывают.
Наверняка кто-то сталкивался с подобным, помогите решить проблему! Исходить следует из того, что доступа к php.ini нет.

Цитата (Burrr @ 26.7.2007, 14:01 )
Mal Hack, а какая папка в режиме safe_mode доступна для создания/редактирования/удаления файлов по дефолту?
Цитата
У вас в варнинге указаны доступные пути (/home/sitename/data:.). Т.е. /home/sitename/data и все вышестоящие директории и . (текущая, откуда запускается скрипт) и все вышестоящие директории.

Проверка показала, что ни одна из этих директорий не позволяет создавать — редактировать файлы.

Режим safe_mode, как выяснилось, не включён:

Почему же появляется ошибка?

Mal Hack, я указывал абсолютный путь к множеству папок, например:
$filename = tempnam(«/home/sitename/data/www/faces/tmp», «jpid»);
И все папки выше тоже пробовал:
$filename = tempnam(«/home/sitename/data/www/faces», «jpid»);
$filename = tempnam(«/home/sitename/data/www», «jpid»);
$filename = tempnam(«/home/sitename/data», «jpid»);
$filename = tempnam(«/home/sitename», «jpid»);
$filename = tempnam(«/home», «jpid»);
— бесполезно.

также пробовал
$filename = tempnam(«.», «jpid»);
Результат всегда один, как я и писал в первом посте.
Что можно сделать?

Пробуем так.
1. Файлу даете еще и расширение, .aaa, например, т.к. это не принципиально.
2. Пробуйте в качестве папки ./
3. 1 и 2 пункт вместе.

Если не сработает, значит это просто запрещено системой.

Покажите ваш код, пожалуйста полностью.

Есть сделать fwrite( «таже папка что и tempname/aaa.aaa» , «w» ); файл создастся?

Mal Hack, ты очевидно имел в вижу fopen, а не fwrite.
Выполнил fopen(«./aaa.tmp» , «w»);
Пишет fopen(./aaa.tmp) [function.fopen]: failed to open stream: Permission denied in .
Ошибка как раз на эту строку.

Через chmod что-то изменить тоже не получилось, ставил chmod(«.», 0755)

Burrr, если пользователь, под которым запускается apache, не root и не владелец директории, у скрипта нет прав изменять там права доступа. Попробуйте писать в /tmp. Эта дирректория чаще всего открыта для всех.

По-видимому, нет доступа у apache на запись в те дирректории, которые Вам нужны. И из скрипта, бегущего под apache, это исправить нельзя. Измените сами, если имеете доступ, или попросите администратора хостинга, выделить apache директории, доступные для записи

Что такое код tempnam

Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20

Код
tempnam() [function.tempnam]: open_basedir restriction in effect. File(/var/tmp) is not within the allowed path(s): (/home/sitename/data:.) in .

Следующие далее ф-ии fopen и др. также не срабатывают.
Наверняка кто-то сталкивался с подобным, помогите решить проблему! Исходить следует из того, что доступа к php.ini нет.

Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4

Прежде чем задать вопрос на форуме воспользуйтесь поиском.

Fally
Дата 26.7.2007, 12:09 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261

Mal Hack
Дата 26.7.2007, 13:49 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20

Burrr
Дата 26.7.2007, 14:01 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261

Mal Hack
Дата 26.7.2007, 14:11 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146

sTa1kEr
Дата 26.7.2007, 14:28 (ссылка) | (нет голосов) Загрузка .
Цитата(Burrr @ 26.7.2007, 14:01 )
Mal Hack, а какая папка в режиме safe_mode доступна для создания/редактирования/удаления файлов по дефолту?

Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20

Burrr
Дата 27.7.2007, 12:07 (ссылка) | (нет голосов) Загрузка .
Цитата
У вас в варнинге указаны доступные пути (/home/sitename/data:.). Т.е. /home/sitename/data и все вышестоящие директории и . (текущая, откуда запускается скрипт) и все вышестоящие директории.

Проверка показала, что ни одна из этих директорий не позволяет создавать — редактировать файлы.

Режим safe_mode, как выяснилось, не включён:

Код
safe_mode Off Off
safe_mode_exec_dir no value no value
safe_mode_gid Off Off
safe_mode_include_dir no value no value

Почему же появляется ошибка?

Это сообщение отредактировал(а) Burrr — 27.7.2007, 12:16

Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261

Mal Hack
Дата 27.7.2007, 12:45 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20

Mal Hack, я указывал абсолютный путь к множеству папок, например:
$filename = tempnam(«/home/sitename/data/www/faces/tmp», «jpid»);
И все папки выше тоже пробовал:
$filename = tempnam(«/home/sitename/data/www/faces», «jpid»);
$filename = tempnam(«/home/sitename/data/www», «jpid»);
$filename = tempnam(«/home/sitename/data», «jpid»);
$filename = tempnam(«/home/sitename», «jpid»);
$filename = tempnam(«/home», «jpid»);
— бесполезно.

также пробовал
$filename = tempnam(«.», «jpid»);
Результат всегда один, как я и писал в первом посте.
Что можно сделать?

Burrr
Дата 27.7.2007, 14:06 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261

Пробуем так.
1. Файлу даете еще и расширение, .aaa, например, т.к. это не принципиально.
2. Пробуйте в качестве папки ./
3. 1 и 2 пункт вместе.

Если не сработает, значит это просто запрещено системой.

Mal Hack
Дата 27.7.2007, 17:33 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20

Burrr
Дата 27.7.2007, 18:22 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261

Mal Hack
Дата 27.7.2007, 18:25 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20

Burrr
Дата 27.7.2007, 18:51 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261

Покажите ваш код, пожалуйста полностью.

Есть сделать fwrite( «таже папка что и tempname/aaa.aaa» , «w» ); файл создастся?

Mal Hack
Дата 27.7.2007, 20:26 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 1
Всего: 20

Mal Hack, ты очевидно имел в вижу fopen, а не fwrite.
Выполнил fopen(«./aaa.tmp» , «w»);
Пишет fopen(./aaa.tmp) [function.fopen]: failed to open stream: Permission denied in .
Ошибка как раз на эту строку.

Через chmod что-то изменить тоже не получилось, ставил chmod(«.», 0755)

Burrr
Дата 28.7.2007, 12:15 (ссылка) | (нет голосов) Загрузка .
Google
Дата 13.11.2020, 16:11 (ссылка)
  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET
  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь
  • Темы «ищу скрипт», «подскажите скрипт» и т.п. будут переноситься в форум «Web-технологии»
  • Темы с именами: «Срочно», «помогите», «не знаю как делать» будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

TempNam эквивалент в C ++

Мне нужно, чтобы генерировать случайные имена, которые я буду использовать для создания временных файлов в каталоге. В настоящее время я использую стандартную C функцию TempNam () для этого. Мой код в C ++ и хотел бы использовать C ++ эквивалент для выполнения той же задачи. Код должен работать на Solaris, а также на Windows.

Кто-нибудь известно о таких вещах в C ++? Любой указатель на это будет высоко оценен.

Попробуйте std::tempnam в cstdio заголовке. ;)

Стандартная библиотека C по-прежнему доступен в коде C ++. Для удобства, они обеспечивают C ++ обертками (в заголовках с «с» префиксом и без расширения) и доступны в пространстве имен станд.

Вы также можете использовать обычную версию C (stdio.h и TempNam в глобальном пространстве имен, но вы действительно просили на C ++ версии;))

Стандартная библиотека C ++ предоставляет только новые функции, когда на самом деле для улучшения. Он имеет класс строк, поскольку строка класс является улучшением по сравнению с полукоксом указателей в C есть. Он имеет векторный класс, потому что, ну, это полезно.

Для чего — то вроде tempnam , что бы C ++ быть в состоянии принести к партии, что мы уже не имеем от C? Так что они об этом ничего, кроме создания старой версии доступна не делать.

Я знаю, что это не отвечает на вопрос, но как примечание стороны, в соответствии со справочной странице:

Хотя TempNam (3) генерирует имена, которые трудно угадать, тем не менее , возможно , что между временем TempNam (3) возвращает путь к файлу и времени , что программа открывает его, другая программа может создать этот путь , используя открытый (2) или создать его в качестве символической ссылки. Это может привести к бреши в системе безопасности. Для того, чтобы избежать таких возможностей, использовать открытый (2) флаг O_EXCL , чтобы открыть путь к файлу. Или еще лучше, использовать mkstemp (3) или tmpfile (3) .

проблема с tempnam в php, размер файла выдает — 0

кто нибудь может объяснить, что за глюк. Я создаю при помощи tempnam() временный файл, записываю в него инфу, а потом пытаюсь получить размер файла и мне выдает, что размер 0. Но при этом я в файле текст появляется. непойму в чем прикол. помогите ПЛЗ

$f=tempnam(‘/mwftp/tmp/’,’tmp’);
if ($this->ftp->ftp_get($f,$this->pwd().’/’.$name[$i])==1) <
//ф-ция ftp_get считывает по ftp данные в файл.
$n=fopen($f,’r’);
$content=fread($n,filesize($f));
fclose($n);
>

при том, что если заменить ф-цию tempnam простой строковой константой, то все нормально!

Правила форума «PHP»

08.08.2010, 18:25

Php сможет определить размер файла?!
Здравствуйте, в настоящее время на странице имею код

Вы можете скачать Правила дорожного.

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

Не устанавливается размер динамического массива — выдает ошибку
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private < Private.

Нужна программа, которая на выходе выдает размер папки +
Здравствуйте нужна программа, которая на выходе выдает размер папки. НО! нужно построить в памяти.

Илон Маск рекомендует:  Техника оптимизации программ (фрагмент) 33
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL