1 file_example.module | file_example_unmanaged_php_submit($form, &$form_state) |
Submit handler to write an unmanaged file using plain PHP functions.
The key functions used here are:
- file_unmanaged_save_data(), which takes a buffer and saves it to a named file, but does not create any kind of tracking record in the database.
- file_create_url(), which converts a URI in the form public://junk.txt or private://something/test.txt into a URL like http://example.com/sites/default/files/junk.txt.
- backdrop_tempnam() generates a temporary filename for use.
Related topics
File
- modules/
examples/ file_example/ file_example.module, line 267 - Hook implementations for the File Example module.
Code
function file_example_unmanaged_php_submit($form, &$form_state) {
$data = $form_state['values']['write_contents'];
$destination = !empty($form_state['values']['destination']) ? $form_state['values']['destination'] : NULL;
if (empty($destination)) {
// If no destination has been provided, use a generated name.
$destination = backdrop_tempnam('public://', 'file');
}
// With all traditional PHP functions we can use the stream wrapper notation
// for a file as well.
$fp = fopen($destination, 'w');
// To demonstrate the fact that everything is based on streams, we'll do
// multiple 5-character writes to put this to the file. We could easily
// (and far more conveniently) write it in a single statement with
// fwrite($fp, $data).
$length = strlen($data);
$write_size = 5;
for ($i = 0; $i < $length; $i += $write_size) {
$result = fwrite($fp, substr($data, $i, $write_size));
if ($result === FALSE) {
backdrop_set_message(t('Failed writing to the file %file', array('%file' => $destination)), 'error');
fclose($fp);
return;
}
}
$url = file_create_url($destination);
$_SESSION['file_example_default_file'] = $destination;
backdrop_set_message(
t('Saved file as %filename (accessible via !url, uri=<span id="uri">@uri</span>)',
array(
'%filename' => $destination,
'@uri' => $destination,
'!url' => l(t('this URL'), $url),
)
)
);
}