سؤال

على جميع خوادم ويندوز ، باستثناء جهاز واحد, عندما كنت تنفيذ التعليمات البرمجية التالية إلى تخصيص مجلد الملفات المؤقتة:

use CGI;
my $tmpfile = new CGITempFile(1);
print "tmpfile='", $tmpfile->as_string(), "'\n";

المتغير $tmpfile يتم تعيين قيمة '.\CGItemp1' و هذا هو ما أريد.ولكن على أحد خوادم انها بشكل غير صحيح تعيين C:\temp\CGItemp1.

جميع الخوادم التي تعمل بنظام التشغيل Windows 2003 Standard Edition, IIS6 و ActivePerl 5.8.8.822 (الترقية إلى إصدار أحدث من بيرل ليس خيارا).والنتيجة هو نفسه دائما عند تشغيل برنامج نصي من سطر الأوامر أو في IIS CGI script (حيث scriptmap .pl = c:\perl\bin\perl.exe "%s" %s).

كيف يمكنني إصلاح هذا Perl التثبيت وإجبارها على العودة '.\CGItemp1'من قبل الافتراضي ؟

حتى لقد نسخت كل بيرل مجلد من العمل ملقمات هذا الجهاز ولكن أي فرح.

@Hometoast:

لقد تم فحص 'TMP'و 'TEMP'متغيرات البيئة أيضا $ENV{TMP} و $ENV{TEMP} وهم متطابقة.

من سطر الأوامر التي تشير إلى ملف تعريف المستخدم الدليل ، على سبيل المثال:

C:\DOCUME~1\[USERNAME]\LOCALS~1\Temp\1

عندما تعمل تحت IIS برنامج نصي CGI كلاهما نقطة:

c:\windows\temp

في مفتاح التسجيل HKEY_USERS/.DEFAULT/Environment, سواء الملقمات:

%USERPROFILE%\Local Settings\Temp

على ActiveState تنفيذ CGITempFile() من الواضح باستخدام آلية بديلة لتحديد كيفية إنشاء مجلد مؤقت.

@Ranguard:

المشكلة الحقيقية هي مع CGI.pm وحدة التعامل مع الملفات المرفقة.كلما يتم تحميل الملف الى الموقع CGI.pm يحتاج إلى وضعه في مكان مؤقت.للقيام بذلك CGITempFile() ويسمى في CGI.pm تخصيص مجلد مؤقت.لذلك للأسف لا أستطيع استخدام File::Temp.شكرا على أي حال.

@كريس:

التي ساعدت مجموعة.وقد فعلت المسح السريع من خلال CGI.pm مصدر سابق ولكن اقتراحك جعلني نعود وننظر في الأمر أكثر مثابر على فهم الخوارزمية.لدي أشياء العامل ، ولكن الشيء الغريب هو أن هناك أصلا لا c:\temp مجلد على الملقم.

للحصول على حل مؤقت أنا خلقت c:\temp المجلد وتعيين أذونات ذات الصلة على الموقع حساب المستخدم المجهول.ولكن لأن هذا هو مشترك مربع لم أستطع ترك الأمور بهذه الطريقة ، على الرغم temp الملفات تم حذفها.لخفض قصة قصيرة طويلة, أنا سميت c:\temp المجلد إلى شيء مختلف و بطريقة سحرية الصحيح '.\'مسار المجلد الذي تم إرجاعها.كما أنني لاحظت أن العميل قد تمكين ملحقات FrontPage على الموقع الذي يزيل الكتابة الوصول إلى حساب المستخدم المجهول على موقع المجلدات حتى هذا الإذن اللازم إعادة تطبيق.ما زلت في حيرة لماذا في بداية هذا الموضوع CGITempFile() كان عائدا c:\temp, رغم هذا المجلد لم تكن موجودة ، لماذا سحرية بدأ العمل مرة أخرى.

هل كانت مفيدة؟

المحلول

اسم الدليل المؤقت هو عقد في $CGITempFile::TMPDIRECTORY و initialised في find_tempdir وظيفة في CGI.مساء.الخوارزمية على اختيار الدليل المؤقت هو موضح في CGI.مساء الوثائق (البحث عن -private_tempfiles).IIUC ، إذا كان C: emp يوجد مجلد على الملقم, CGI.مساء سيتم استخدامه.إذا كان أي من الدلائل التي تحققت في find_tempdir موجودة, ثم الدليل الحالي "." يستخدم.

آمل أن يساعد هذا.

نصائح أخرى

ليست الإجابة المباشرة على سؤالك, ولكن هل حاولت استخدام الملف::Temp?

وهي مصممة خصيصا للعمل على أي نظام تشغيل.

إذا كنت تقوم بتشغيل هذا البرنامج النصي كما يمكنك التحقق %TEMP% متغير البيئة لمعرفة ما إذا كان الأمر يختلف.

إذا كان IIS المنفذة ، تحقق القيم في التسجيل TMP و درجة الحرارة تحت HKEY_USERS/.افتراضي/البيئة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top