2013-01-22 26 views
10

Chúng tôi đã thừa kế trang PHP chạy tốt trên Ubuntu, nhưng đổ mã nguồn lên màn hình trên hệ thống Windows 7 chạy XAMMP bằng PHP 5.4 hoặc WAMP sử dụng PHP 5.3 .Trang PHP hiển thị trên ubuntu, không phải trên Windows 7

Điểm kết xuất xảy ra có vẻ là khi nó cố gắng phân tích cú pháp kết hợp ký tự "->" (thuộc tính đối tượng). Khi tôi thay đổi thành "[]" để truy cập như một phần tử mảng, nó sẽ vượt qua nó, nhưng sau đó đổ mã nguồn lên màn hình xuất hiện sau khi kết hợp ký tự "=>" (ánh xạ). Nhận xét rằng không hoạt động, chỉ xóa toàn bộ dòng được nó qua đó.

Cuối cùng, khi nó chỉ in ra html với "<" và ">" dấu hiệu, điều đó cũng gây ra kết xuất màn hình. Nếu tôi thay thế các ký tự đó bằng các thực thể html, mã nguồn sẽ không đổ thêm nữa, nhưng chương trình không hiển thị menu và không hoạt động chút nào. Lưu ý rằng tôi có thể đăng nhập thành công vào ứng dụng thông qua trang đăng nhập của nó, mặc dù thậm chí hiển thị "POST" và một số ký tự "<" và ">" khác trong trường tên người dùng.

Tôi đã thử chạy unix2dos trên toàn bộ ứng dụng, nhưng điều đó không có hiệu lực. Cũng cố gắng chuyển đổi văn bản của một trong các trang vi phạm sang UTF-8, nhưng vẫn không có may mắn.

Trong câu trả lời cho một số câu hỏi đặt ra: phiên bản ubuntu

Các lao động là PHP Version 5.3.10-1ubuntu3.1

Phần đầu tiên của mã mà làm việc trong Ubuntu và không có trong Windows là này :

public function __construct($gid) 
{ 
    $this->id = $gid; 
    return $this->retrieve(); 
} 

nơi mã bãi vào màn hình bắt đầu với:

id = $gid; return $this->retrieve(); } 

Có, PHPInfo hoạt động, hiển thị cho máy chủ WAMP với Phiên bản PHP 5.3.13

Tôi đã thử thay đổi thẻ mở ngắn nhưng không có sự khác biệt.

Sản phẩm được viết cho chúng tôi bởi một nhóm gia công phần mềm, và nó dường như được dựa trên một số loại khung. Nhưng tôi không thể tìm thấy bất kỳ tham chiếu nào đến bất kỳ tên lớp học nào trên Google, vì vậy có thể họ đã viết toàn bộ nội dung trong nhà.

Going to the log apache, sai số thực tế xảy ra trên dòng này:

$_SESSION['admin_gid'] = Membership::getGroup($rUser['id']); 

nơi thông báo lỗi là:

Membership' không tìm thấy

thành viên là một lớp được khai báo sau này trong cùng một tệp như một tệp được bán phá giá trên màn hình tại điểm được hiển thị ở trên, do đó, vì một lý do nào đó, trình phân tích cú pháp PHP không hiểu đọc mã PHP từ thời điểm đó.

+2

bạn có thể đăng các mảnh ngắn nhất của mã mà hoạt động trên một nền tảng và không phải là khác? – Floris

+5

có vẻ như chỉ thị thẻ mở ngắn tắt trong cửa sổ http://php.net/manual/en/ini.core.php#ini.short-open-tag –

+2

Bạn có thể nhận được một ' 'để làm việc trên máy chủ web Win7? – halfer

Trả lời

2
I tried changing the short-open-tag but it made no difference. 

Trong trường hợp này, những gì bạn có thể làm là viết một tập lệnh nhỏ và chạy nó và xem nó có hoạt động hay không. thử thẻ ngắn và phương thức dưới đây. Hãy nhớ rằng nếu bạn gây rối với php.ini, bạn sẽ phải khởi động lại máy chủ. Tốt hơn là thay đổi cài đặt bằng cách nhấp chuột phải vào biểu tượng máy chủ trên thanh tác vụ. Nó có thể là do php short tags.Thử bật và tắt và chạy tập lệnh. Ngoài ra, hãy thay đổi tập lệnh bên dưới và xem điều đó ảnh hưởng như thế nào đến cài đặt đã thay đổi của bạn.

EG:

<?php 
echo "hi"; 
// phpinfo(); <-- preferred if you can 
?> 

Sau đó, bạn có thể xem liệu máy chủ của bạn đang làm việc bạn có ý định như nó. Nếu nó O/P hi bạn tốt để thử mã lớn của bạn và xem.

Bằng cách mã mà bạn đã cung cấp có vẻ như không có lỗi.

+0

Điều này ban đầu được đề xuất trong các nhận xét, nhưng cách làm cho nó hoạt động là đặt nó bằng cách đặt cờ bằng cách nhấp chuột phải vào máy chủ . –

0

Hmmm, thật thú vị.

Nếu đây là một ứng dụng lớn, thì bạn có thể phải kiểm tra tất cả các tệp đang được bao gồm. Có thể có một số vấn đề.

Cố gắng làm theo các bước sau

  1. Đặt error_reporting(E_ALL);
  2. Hãy thử sử dụng debug_backtracehttp://php.net/manual/en/function.debug-backtrace.php
  3. tình trạng tra Output đệm. Bật hoặc tắt

Mặt khác, bạn đã sao chép toàn bộ dự án từ linux sang cửa sổ chưa? có thể một số tệp nằm ngoài thư mục dự án không có trong cửa sổ? Tôi biết rất nhiều người đã tạo ra những sơ hở như vậy để họ có thể liên lạc với "HPORT TRỢ" :)

0

PHP không phân biệt chữ hoa chữ thường cho việc đặt tên lớp. Bạn thường có thể làm

$membership = new membership(); 

ngay cả khi lớp học có tên 'Thành viên' và ngược lại. Cố gắng thay đổi tên lớp, có thể tên tệp lớp là phân biệt chữ hoa chữ thường trên hệ điều hành.

0

của nó thực sự lạ .. mặc dù bạn có thể kiểm tra thành viên lớp được nạp hoặc không sử dụng chức năng:

array get_declared_classes (void) 


<?php 
print_r(get_declared_classes()); 
?> 

Nó sẽ Trả về một mảng với tên của lớp được định nghĩa.

ref: http://php.net/manual/en/function.get-declared-classes.php