Что может отличаться между этими двумя PHP-строками? - PullRequest
0 голосов
/ 17 декабря 2011

Это вариант моего Почему 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"

1 Ответ

1 голос
/ 17 декабря 2011

Это сложно отследить, и для этого требуется копание исходного кода: -

Оказывается, должно быть связано с функцией stripslahses_deep и apply_filter

php > $path = 'C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt';
php > var_dump ( stripslashes_deep($path));
string(75) "C:xampphtdocswordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt"

Если вы сделаете это: -

php > var_dump ( stripslashes_deep( addslashes($path) ) );
string(78) "C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt"

У меня нет определенного заключения,
вероятно вызвано косыми чертами

Чтобы начать быструю отладку,
попробуйте проверить значение с помощью

/wp-content/uploads/2011/12/ReSharper-6.1-License.txt
C:/xampp/htdocs/wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt
...