Я новичок, пытающийся закодировать валидатор загрузки файла, который отправляет изображение в виде BLOB-объекта на MySQL база данных. Изображение взято с загрузка файла формы тяжести в WordPress (идентификатор формы — 1). Когда я запускаю приведенный ниже скрипт, блоб не отправляется в мою таблицу mallampati_images, однако отображается предупреждение о формате файла. Он также выводит эту ошибку:
Warning: file_get_contents(/home/clients/4ceaa5faab208e8af4350138684e6d6d/web/wp-content/uploads/mallampati.png): failed to open stream: No such file or directory in /home/clients/4ceaa5faab208e8af4350138684e6d6d/web/wp-content/themes/twentytwelve/functions.php on line 535
Что я не понимаю, так это как отформатировать ссылку на файл. Я несколько часов пытался найти то, что смог найти в сети, но не могу заставить его работать. Я отредактировал код ниже, чтобы вернуть ссылку (кажется, это правильная абсолютная ссылка …)
Сценарий:
function testimage($path)
{
if(!preg_match("/\.(png|jpg|gif)$/",$path,$ext)) return 0;
$ret = null;
switch($ext[1])
{
case 'png': $ret = @imagecreatefrompng($path); break;
case 'jpg': $ret = @imagecreatefromjpeg($path); break;
case 'gif': $ret = @imagecreatefromgif($path); break;
default: $ret = 0;
}
return $ret;
}
add_action("gform_after_submission_1", "input_fields", 10, 3);
function input_fields($entry){
global $wpdb;
if (isset($_FILES['input_1'])) {
$file_url = $entry['1'];
//$img_blob = file_get_contents($file_url);
$validate = testimage($file_url);
$udir = wp_upload_dir();
$basedir = $udir['basedir'];
$target=$basedir.'/'.basename($_FILES['input_1']['name']);
//$try = $_FILES['input_1']['tmp_name'];
$img_blob = file_get_contents ($target);
echo "<script type='text/javascript'>alert('value: $target');</script>";
}
if(!empty($validate)) {
echo "<script type='text/javascript'>alert('The file was of the correct format');</script>";
$SQL = "INSERT INTO mallampati_images (img_blob) VALUES ( $img_blob )";
$wpdb->query($SQL);
}
}
Я наконец сделал это.
Гравитационные формы, похоже, не обрабатывают файлы в точности как примеры, на которые я смотрел. Проблема заключалась в том, что в запросе SQL использовался неверный путь к файлу.
function testimage($path)
{
if(!preg_match("/\.(png|jpg|gif)$/",$path,$ext)) return 0;
$ret = null;
switch($ext[1])
{
case 'png': $ret = @imagecreatefrompng($path); break;
case 'jpg': $ret = @imagecreatefromjpeg($path); break;
case 'gif': $ret = @imagecreatefromgif($path); break;
default: $ret = 0;
}
return $ret;
}
add_action("gform_after_submission_1", "input_fields", 10, 2);
function input_fields($entry){
global $wpdb;
if(isset($entry[1])){
$valid = testimage($entry[1]);
if($valid){
$mpFilePath= $entry[1];
$blob = file_get_contents($mpFilePath) or die ('cannot read file');
$blob = mysql_escape_string($blob);
$SQL = "INSERT INTO mallampati_images (img_blob) VALUES ( '$blob' )";
$wpdb->query($SQL) or die ('query failed');
}
else{
echo "<script type='text/javascript'>alert('Incorrect file format');</script>";
}
}
}
Других решений пока нет …