Я пытаюсь переместить веб-сайт PHP с одного хоста (Avlux, который закрывается) на другой (DreamHost). У меня проблемы с кодом, который генерирует билеты событий. На данный момент я запускаю систему на WampServer, используя код Visual Studio для редактирования программ.
Это html-код ссылки «Распечатать» билет:
href = "/tickets/tickets/<?=$o->id?>/?access_token=<?=$o->access_token()?>"
И это функция:
public function access_token() {
return base64_encode($this->id + 'ClearSight Studio');
}
Проблема: На старом хосте билет генерируется. base64_encode создает набор символов, например: NjA4NTQ, и печатает билет. На новом хосте гиперссылка не создается и программа завершается.
Вопрос: Что означает знак вопроса в «/?access_token»?
Что я пробовал: Я попытался изолировать код, следующий за билетами/билетами, и запустить его автономно, но, похоже, я не могу сделать это снова, не создавая ошибку, которая, похоже, испортит всю программу в коде Visual Studio.
$o->id — целое число. Когда мне удалось запустить автономную функцию access_token, она не смогла объединить целое число со строкой. Поэтому я преобразовал его в строку $str_id и заменил id?> на
вопросительный знак в URL-адресе делает остальное параметром: my.php?param1=valueA¶m2=valueB
.. вы можете получить доступ к «значениям» в my.php
через $_GET['param1']
Вы проверяли журнал ошибок на сервере? Случайно ли ваша смена хоста также включала переход на более новую версию php?
Да, это более новая версия PHP: 8.0.
Спасибо. Итак, причиной разницы в поведении вашего кода является смена версии PHP, а не смена хоста!
@Penny Привет, Пенни, добро пожаловать в Stack Overflow. Это может быть непростое место, и мне немного жаль, что ваш первый контакт оказался таким плохим. Но это не просто доска объявлений, где другие помогают вам решить ваши проблемы. Вам нужно проявить некоторые усилия, чтобы найти решение самостоятельно. Поэтому, естественно, для новичков Stack Overflow — суровое место. Это место ожидает, что вы прочитаете руководства и ответы Google, прежде чем задавать вопросы.
Спасибо. Мне кажется, что я зашел настолько далеко, насколько мог, прежде чем задать вопрос. Прямо сейчас я пытаюсь понять, как сделать то, что вы просили, и закрыть вопрос.
Этот
href = "/tickets/tickets/<?=$o->id?>/?access_token=<?=$o->
Означает href
, который включает в себя /tickets/tickets/, за которым следует любое значение (предположительно числовое), которое имеет $o->id
, за которым следует /?, заканчивая эффективную часть URL-адреса, которая указывает, куда отправлять запрос, а ?
здесь указывает, что строка запроса придет, где у вас будут пары key=value
, разделенные &
амперсандами. Итак, access_token
является частью строки запроса и представляет собой параметр GET (к которому вы сможете получить доступ через $_GET['access_token'])
в вашем PHP-коде), и его значением будет то, что вы описываете, предположительно $o->access_token
или что-то в этом роде. Ваш код не работает из-за отсутствия надлежащего вложения для вашего <?
, который представляет собой синтаксис, позволяющий передать инициативу PHP по вводу чего-либо в шаблон, поскольку PHP — это язык шаблонов. Итак, вам нужно будет выяснить, что такое $o
, и исправить приведенный выше код примерно так:
href = "/tickets/tickets/<?=$o->id?>/?access_token=<?=$o->access_token?>
Я хотел бы любезно спросить причину отрицательного голосования, чтобы я мог улучшить ответ.
не знаю, это был не я. Но ваш ответ не решает проблему с кодом. Может быть, поэтому?
А еще, возможно, потому, что <?=
— это не «старый синтаксис», а стандартный.
А еще «php — это язык шаблонов», лол. Какой сейчас год? 1996 год?
@Кайи, спасибо, что отметил, что <?=
является стандартным. Я все еще думаю, что это старый синтаксис, и лично я его не использую, но соответствующим образом скорректировал ответ. Что касается того, что PHP является языком шаблонов, то это верно и сейчас, поскольку вы можете передавать эхо через PHP в HTML. Тем не менее, спасибо за указания на то, что вы считаете некачественным.
Извините, код, который оказался в моем сообщении, был усечен. Это именно так, как предложено выше:
это было: href = "/tickets/tickets/<?=$o->id?>/?access_token=<?=$o->access_token?>
Спасибо, Лайош. Это было полезно. Я новичок в PHP.
этот код:
base64_encode($this->id + 'ClearSight Studio');
приводит к ошибке:
Предупреждение PHP: Uncaught TypeError: Неподдерживаемые типы операндов: строка + int в оболочке php
вместо этого, чтобы объединить строку с целым числом, напишите:
base64_encode($this->id . 'ClearSight Studio');
Кажется, вы не смогли увидеть сообщение об ошибке. В вашем php.ini
установите:
display_errors = On
... чтобы видеть предупреждения и ошибки в реальном времени во время разработки. Обязательно удалите этот параметр для производства.
Я еще не вышел из леса, но ваше предложение об изменении функции позволило ссылке работать. Отображение ошибок уже включено — я получаю трассировку стека. Я очень расстроен сайтом переполнения стека. Правила включения кода сбивают с толку. Кажется, они непоследовательны.
@ Пенни, нет, они не противоречивы. Вы должны включать код, но только в том объеме, который необходим для иллюстрации одной проблемы. Мы здесь не для того, чтобы исправить 200 LoC за вас.
@Пенни, если этот код помог вам, пожалуйста, примите этот ответ и/или проголосуйте за него.
Я не пытаюсь показать 200 строк кода, но когда я попытался отредактировать свое сообщение, мне не удалось опубликовать ни одной строки кода. Я даже пытался скопировать/вставить код, который изначально опубликовал, и копирование, похоже, испортило оригинал. Поэтому я просто отменил это. Но да, я приму ответ, потому что ссылка сработала. Спасибо.
Что касается вопросительного знака, взгляните на синтаксис URL-адреса. Знак вопроса предшествует необязательному компоненту запроса. Пожалуйста, отредактируйте свой вопрос, чтобы исправить сегменты кода, поскольку они не имеют особого смысла.