I'm building a smartphone app that allows users to record a voice clip and send it to our server, which runs ProcessWire. Files are sent over HTTPS Post, currently without any sort of authentication.
I've succeeded using the WireUpload class to fetch the uploaded file from the $_FILES super global. Where I get in trouble is when I try to add the audio file to the audio page, where there's an Input field called 'audiofile'. Whenever I try to use any file related method, an Internal Server Error occurs.
Here's my code, which runs in the page's template.
<?php
Header("Content-Type: text/plain");
$upload_path = $config->paths->assets . "files/audio/";
$u = new WireUpload('files');
$u->setMaxFiles(1);
$u->setOverwrite(false);
$u->setValidExtensions(array('mp3', 'mp4', 'm4a'));
$u->setDestinationPath($upload_path);
// I can confirm through my FTP client that the file sent through POST actually shows up in the $upload_path location.
$fileresult = $u->execute();
// This is the File input field in my template. Doing print_r($audiofield) confirms this is an existing object.
$audiofield = $fields->get("audiofile");
// Trying this for the heck of it, but all that results is HTTP 500.
$audiofield->deleteAll();
foreach($fileresult as $filename) {
// I've seen various examples on what to do now. Here's one that causes a 500 error.
$page->'audiofile' = $upload_path . $filename;
// This seems the most logical thing to do, but also causes HTTP 500.
$audiofield->add($upload_path . $filename);
// Unlinking succeeds (given that I comment out the lines that cause the HTTP 500 errors)
unlink($upload_path . $filename);
}
// We never get to this phase.
$page->save();
?>
Things of note:
Server runs PHP 5.4.4-14+deb7u8 on Debian with Apache/2.2.22.
File uploading through the admin on the audio page works without issues, also when uploading multiple files at once or sequentially.
I've confirmed the owner of $upload_path to be www-data and its permissions to be 755.
What's the final step I'm missing to add the audio file to the input field on my page?