سؤال
أنا عالق وفي حاجة إلى يد. آمل أن بعض واحدة يمكن أن تساعد؟
أي شخص لديه أي فكرة لماذا أحصل على "فشل الكتابة" في هذا الرمز؟
$write_file = "/usr/home/public_html/php/users_v2.sql";
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
if (is_writeable($write_file)) {
if ($write_handle === FALSE) echo 'Failed handle?!';
if (fwrite($write_handle, "Hi\n") === FALSE) echo "Failed write!\n";
}
fclose($write_handle);
شكرا مقدما.
المحلول
باستخدام أو المشغل عند إنشاء مؤشر الملفات الخاص بك، فإنك تقوم بإرجاع قيمة منطقية اعتمادا على العملية. لذلك سوف تحتوي $ Write_handle على صواب أو خطأ، بدلا من مورد الملفات. وسيلة أفضل لفتح ملف للكتابة والاختبار أنه كان ناجحا سيكون هذا:
$write_handle = fopen($write_file, 'w');
if ($write_handle === false)
{
die('Could not open file ' . $write_file);
}
بالإضافة إلى ذلك، يمكنك استخدام file_put_contents
()
وظيفة التي تعالج fopen ()، fwrite () و fclose () لك. أوصي هذا فقط إذا كنت تقوم بتنفيذ واحد فقط اكتب لنفس الملف، حيث سيكون الكثير من النفقات العامة، وما لم تمر FILE_APPEND
العلم، وسوف تفريغ الملف لكل كتابة.
نصائح أخرى
لقد رأيت أنه يستخدم في كل مكان ولكن المشكلة هي || يموت ("كول لا يفتح المستخدمين_v2!")؛
أولا أضفت:
error_reporting(E_ALL);
لمعرفة ما تقارير PHP عن الأخطاء.
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
fclose($write_handle);
إرجاع خطأ مقبض دفق غير صالح ومقبض ملف 1. بدونه مقبض الملفات المرتجع هو "معرف المورد #x".
تغيير الخط إلى:
$write_handle = fopen($write_file, "w"); // || die("Couln't open users_v2!");
وكود الخاص بك يعمل بشكل جيد. سأذهب نشر هذا على php.net الآن.