2016-10-06 19 views
5

Tôi đã có một codesetup cũ từ một số nhà phát triển khác và tôi đang thiết lập giống nhau trên máy chủ của tôi, ở đó tôi nhìn thấy một dòngChúng ta có thể sử dụng biểu tượng @ trong tên biến php

<?php @$Days = $_POST['Days']; ?> 

Mã này chạy tốt trên của tôi thiết lập địa phương nhưng một khi tôi tải lên nó trên máy chủ này đã không làm việc và trả về một lỗi mạng và tất cả các mã/HTML sau khi mã này cũng không hoạt động.

Mặc dù, tôi đã gỡ lỗi vấn đề này và đã xóa sự cố này. Ngoài ra, tôi biết rằng để xử lý các lỗi chúng tôi sử dụng biểu tượng @ và tôi cũng đã đọc this question

Truy vấn của tôi là lỗi trong trường hợp trên, tại sao nó không được hiển thị, nếu tôi muốn kiểm tra lỗi thì tôi sẽ làm gì.

Đối với báo cáo lỗi tôi sẽ cho bạn biết rằng tôi đã sử dụng mã dưới đây

<?php 
ini_set("display_errors", "1"); 
error_reporting(E_ALL); 
?> 

Vì vậy, xin vui lòng cho tôi biết tại sao mã của tôi không thể vượt qua bản Tuyên Bố này, như tôi đã có khoảng 100 của khối mã đó. Có bất kỳ thiết lập trong php mà có thể giúp tôi vượt qua điều này.

+0

bạn có chắc là bạn đã đọc câu hỏi đó không? '@' ngăn chặn/bỏ qua các lỗi và bạn không xử lý các lỗi bằng cách bỏ qua chúng. Nó giống như nói rằng bạn xử lý các khoản nợ thẻ tín dụng của bạn bằng cách bỏ qua các thông báo trả nợ bạn nhận được –

+0

Có và tôi biết rằng @ suprresses lỗi bởi các chức năng nhất định, tôi không rõ những gì nó làm trong trường hợp của tôi, trước tên biến. –

+0

* "để xử lý các lỗi chúng tôi sử dụng biểu tượng @" * - điều này là đồng bằng sai. Bằng cách đặt '@' trước câu lệnh bạn không xử lý các lỗi. Bạn [giả vờ họ đã không xảy ra] (http://php.net/manual/en/language.operators.errorcontrol.php). Đó là một sự khác biệt lớn. – axiac

Trả lời

4

@ là toán tử triệt tiêu lỗi trong PHP, hãy xem documentation.

Trong ví dụ của bạn, nó được sử dụng trước tên biến để tránh lỗi E_NOTICE ở đó. Nếu trong mảng $ _POST, phím 'Ngày' không được đặt, nó sẽ ném một tin nhắn E_NOTICE, nhưng @ được sử dụng ở đó để tránh E_NOTICE đó.

Nguyên nhân của mã không hoạt động trên máy chủ có thể do cấu hình scream.enabled directive in your php.ini bị tắt.

Tắt scream nên khắc phục sự cố.

Thay đổi chỉ trong php.ini của bạn, như vậy:

scream.enabled = 0 

Nếu bạn muốn vô hiệu hóa nó trong thời gian chạy, sau đó bạn có thể sử dụng ini_set như đã nêu trong cuốn hướng dẫn:

ini_set('scream.enabled', false); 

Sửa

có người trong các ý kiến ​​chỉ ra tôi đã không đủ kỹ lưỡng với câu trả lời của tôi. Tôi sẽ cố gắng sửa đổi sai lầm của mình trong bản chỉnh sửa ở đây :).

Lý do la hét (và vô hiệu hóa @) có thể/sẽ phá vỡ mã là do biến không có giá trị. Nếu phần còn lại của mã cố gắng sử dụng biến, nó sẽ ném một lỗi.

Ngoài ra, E_NOTICE có thể phát ra lỗi nếu bạn đính kèm trình xử lý lỗi vào đó. Một trích dẫn từ another question:

Đoạn mã trên sẽ ném một ErrorException bất cứ khi nào E_NOTICE hoặc E_WARNING được nâng lên, chấm dứt một cách hiệu quả đầu ra kịch bản (nếu trừ không bắt).Ném ngoại lệ về lỗi PHP là tốt nhất kết hợp với chiến lược xử lý ngoại lệ song song (set_exception_handler) để chấm dứt một cách duyên dáng trong môi trường sản xuất .

+2

Một thông báo sẽ không ngừng thực hiện, với chúng tôi mà không có tiếng hét, vì vậy tôi không chắc chắn điều này thực sự sẽ giúp đỡ. – IMSoP

+0

Đúng, không phải lúc nào cũng gây ra lỗi nhưng không có thông báo lỗi thực sự, điều tốt nhất tôi có thể làm :) Hãy để tôi thêm một số thông tin để trả lời, cảm ơn. –

+0

Cảm ơn bạn đã biết thông tin @RickvanLieshout, tôi đã gỡ lỗi thêm về điều này và thực sự khai báo biến không gây ra lỗi. Nó đã được sử dụng như Điều này thực sự gây ra vấn đề. –

Các vấn đề liên quan