Это вариант моего Почему update_post_meta не работает для определенных строк? вопрос по Ответы WordPress . Я привел его сюда, потому что подозреваю, что это скорее проблема с чистым PHP, чем просто с WordPress.
Мой вопрос основан на следующем коде:
$upload = wp_handle_upload ( $_FILES [WPSM_MAIL_META_ATTACHMENT], array ('test_form' => false ) );
$path = 'C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt';
var_dump($path);
$path = $upload['file'];
var_dump($path);
die();
update_post_meta ( 34, WPSM_MAIL_META_ATTACHMENT, $path );
Вызов update_post_meta
обновляет столбец WPSM_MAIL_META_ATTACHMENT
в базе данных WordPress для номера сообщения. 34. Присвоение строкового литерала в строке 2 дает $path
точно такое же значение, которое присваивается элементу массива в строке 4, но при неизменном коде столбец WPSM_MAIL_META_ATTACHMENT
обновляется до пустой строки. Если я закомментирую строку 4, следовательно, используя только буквальное присваивание, столбец WPSM_MAIL_META_ATTACHMENT
будет обновлен до правильного значения пути к файлу.
Я могу только представить, что две разные строки, присвоенные $path
, отличаются каким-то образом, что невидимо для меня с моими очень отладочными инструментами var_dump
и die
. Как я могу диагностировать различия между двумя описанными выше случаями? Или, в качестве компромисса, могу ли я что-нибудь сделать, чтобы изменить назначение $path = $upload['file']
, чтобы получить тот же результат, что и с буквальным назначением?
Вывод в окне моего браузера после выполнения этого кода выглядит точно так, как показано в одной строке, ради точности:
string(78) "C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt" string(78) "C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt"