এটি এই স্ট্যাক ওভারফ্লো পোস্টের সাথে সম্পর্কিত:
গ্লোব () উইন্ডোজে মাল্টিবাইট অক্ষর সহ ফাইলের নাম খুঁজে পাবে না?
আমার পিএইচপি এবং উইন্ডোজে মাল্টিবাইট অক্ষরযুক্ত ফাইলগুলির সাথে সমস্যা হচ্ছে। এখানে আমার পরীক্ষার কেস:
print_r(scandir('./uploads/'));
print_r(glob('./uploads/*'));
রিমোট ইউনিক্স সার্ভারে সঠিক আউটপুট:
Array
(
[0] => .
[1] => ..
[2] => filename-äöü.jpg
[3] => filename.jpg
[4] => test이test.jpg
[5] => имя файла.jpg
[6] => פילענאַמע.jpg
[7] => 文件名.jpg
)
Array
(
[0] => ./uploads/filename-äöü.jpg
[1] => ./uploads/filename.jpg
[2] => ./uploads/test이test.jpg
[3] => ./uploads/имя файла.jpg
[4] => ./uploads/פילענאַמע.jpg
[5] => ./uploads/文件名.jpg
)
উইন্ডোজ স্থানীয়ভাবে ভুল আউটপুট:
Array
(
[0] => .
[1] => ..
[2] => ??? ?????.jpg
[3] => ???.jpg
[4] => ?????????.jpg
[5] => filename-äöü.jpg
[6] => filename.jpg
[7] => test?test.jpg
)
Array
(
[0] => ./uploads/filename-äöü.jpg
[1] => ./uploads/filename.jpg
)
আমি যে উত্তরটি গ্রহণ করতে পছন্দ করেছি তার একটি প্রাসঙ্গিক অংশ এখানে দেওয়া হয়েছে (যা আসলে 2 বছর আগে অনলাইনে পোস্ট করা একটি নিবন্ধের একটি উদ্ধৃতি):
এই নিবন্ধটির মন্তব্যগুলি থেকে: http://www.rooftopsolutions.nl/blog/files systemm-encoding-and-php
উইন্ডোজ আপনার পিএইচপি ইনস্টলেশন থেকে আউটপুট ব্যাখ্যা করা সহজ: আপনি পিএইচপি এর ভুল সংস্করণ ইনস্টল করেছেন, এবং উইন 32 এপিআই এর ইউনিকোড সংস্করণ ব্যবহার করার জন্য সংকলিত নয় এমন একটি সংস্করণ ব্যবহার করেছেন। এই কারণে, পিএইচপি দ্বারা ব্যবহৃত ফাইল সিস্টেম কলগুলি "এএনএসআই" এপিআই ব্যবহার করবে এবং তাই পিএইচপি এই সংস্করণটির সাথে সংযুক্ত সি / সি ++ গ্রন্থাগারগুলি প্রথমে ইউটিএফ-8-এনকোড পিএইচপি স্ট্রিংটিকে স্থানীয় "এএনএসআই" তে রূপান্তরিত করার চেষ্টা করবে চলমান পরিবেশে কোডপেজ নির্বাচিত হয়েছে (একটি কমান্ড লাইন উইন্ডো থেকে পিএইচপি শুরু করার আগে CHCP কমান্ড দেখুন)
আপনার উইন্ডোজের সংস্করণটি সম্ভবত এই অদ্ভুত জিনিসের জন্য দায়ী নয়। প্রকৃতপক্ষে, এটি পিএইচপি-র আপনার সংস্করণ যা সঠিকভাবে সংকলিত হয়নি এবং এটি উইন 32 এপিআই-এর লেগ্যাসি এএনএসআই সংস্করণ ব্যবহার করে (উইন্ডোজ 95/98 এর লিগ্যাসি 16-বিট সংস্করণের সাথে সামঞ্জস্যের জন্য যার কার্নেলের ফাইল সিস্টেমের সমর্থনটি সরাসরি ছিল না) ইউনিকোডের জন্য সমর্থন, তবে ইউনিকোডকে স্থানীয় এএনএসআই কোডপেজে API এর আসল এএনএসআই সংস্করণ ব্যবহার করার আগে রূপান্তর করতে অভ্যন্তরীণ রূপান্তর স্তর ব্যবহার করেছে)।
উইন 32 এপিআই-র ইউনিকোড সংস্করণটি ব্যবহার করতে সংকলক বিকল্পটি ব্যবহার করে পিএইচপি পুনরায় কম্পাইল করুন (যা আজ ডিফল্ট হওয়া উচিত এবং যাইহোক উইন্ডোজ 95 বা উইন্ডোজ 98 হতে হবে এমন কোনও সার্ভারে পিএইচপি সর্বদা ডিফল্ট হবে না ...)
এটি আমার সমস্যা কিনা তা আমি নিশ্চিত করতে পারছি না। আমি phpinfo()
আকর্ষণীয় কিছু ব্যবহার করেছি এবং খুঁজে পেলাম না তবে কী সন্ধান করব তা নিশ্চিত ছিলাম না। আমি সহজ ইনস্টলেশনগুলির জন্য এক্সএএমপিপি ব্যবহার করেছি , সুতরাং এটি কীভাবে ইনস্টল করা হয়েছিল আমি ঠিক তা নিশ্চিত নই।
আমি উইন্ডোজ,, bit৪ বিট ব্যবহার করছি - সুতরাং আমার অজ্ঞতা ক্ষমা করুন, তবে "উইন 32" এখানে প্রাসঙ্গিক কিনা তাও আমি নিশ্চিত নই। আমার বর্তমান পিএইচপি-র সংস্করণটি উপরে বর্ণিত কনফিগারেশনের সাথে সংকলিত হয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?
- পিএইচপি সংস্করণ : 5.3.8
- সিস্টেম : উইন্ডোজ এনটি ডব্লিউইএস-পিসি 6.1 বিল্ড 7601 (উইন্ডোজ 7 হোম প্রিমিয়াম সংস্করণ পরিষেবা প্যাক 1) i586
- বিল্ডের তারিখ : আগস্ট 23 2011 11:47:20
- কম্পাইলার : MSVC9 (ভিসুয়াল সি ++ 2008)
- আর্কিটেকচার : x86
- কমান্ড কনফিগার করুন :
cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--disable-isapi" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=D:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8=D:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8-11g=D:\php-sdk\oracle\instantclient11\sdk,shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet" "--with-mcrypt=static" "--disable-static-analyze"
যদি এটি প্রাসঙ্গিক হয় বা কোনও দরকারী তথ্য প্রকাশ করে, আমার phpinfo()
(এমবিস্ট্রিং বিভাগ) এর একটি স্ক্রিন শট এখানে রয়েছে :
কীভাবে আমি জানতে পারি যে আমার পিএইচপি ইনস্টলটি "উইন 32 এপিআই এর ইউনিকোডি সংস্করণ দিয়ে সংকলিত হয়েছে"? (এবং এটি আসলে কোনও অর্থ দেয়?)